JAVA-XML&JSON

1、 什么是XML

EXtensible Markup Language 可扩展标记语言

特点

XML与操作系统、编程语言的开发平台无关

实现不同系统之间的数据交换

作用

数据交互

​ 配置应用程序和网站

Ajax的基石

  所有XML元素都必须有结束标签
  XML标签对大小写敏感
  XML元素都必须正确嵌套
  同级标签以缩进形式对齐
  元素名称可以包含字母、数字或其他的字符
  元素名称不能以数字或者标点符号开始
  元素名称中不能包含空格(不要包含连字符、减号)
  必须有且仅有一个根元素

2、 DTD文件

此段内同可以参考W3CSCHOOL

 <?xml version="1.0" encoding="UTF-8"?>
  <!-- +可以有一个或多个,至少一个,?有一个或者没有最多一个,*随意 -->
  <!DOCTYPE books[
      <!ElEMRNT books (book*)>
      <!ElEMRNT book (author,title,description)>
      <!ElEMRNT author (#PADATA)>
      <!ElEMRNT title (#PADATA)>
      <!ElEMRNT description (#PADATA)>
  ]>
  ​
  <books>
      <!-- 图书信息 -->
      <book id="bk01">
          <author>王珊</author>
          <title>NET高级编程</title>
          <description>包含C#框架和网络编程等</description>
      </book>
      <book id="kb102">
          <author>王珊2</author>
          <title>NET高级编程2</title>
          <description>包含C#框架和网络编程等2</description>
      </book>
  </books>

3、 使用DOM操作XML

3.1、 读取DOM文件内容

 //XML原文件
  <?xml version="1.0" encoding="UTF-8"?>
  <PhoneInfo>
      <Brand name="华为" id="001"><Type name="U8650"/><Type name="HW123"/><Type name="HW321"/></Brand>
      <Brand name="苹果" id="002"><Type name="iPhone4"/></Brand>
  </PhoneInfo>
  
 public static void main(String[] args)throws Exception{
      //DOM解析XML文件步骤
      //1.创建解析器工厂对象
      DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
      //2.解析器工厂对象创建解析器对象
      DocumentBuilder db=factory.newDocumentBulider();
      //3.解析器对象指定XML文件创建Document对象
      Documnet document=db.parse(new File("收藏信息.xml");
      //4.以Document对象为起点操作DOM树;
      NodeList brand=document.getElementsByTagName("Brand");
      System.out.println("收藏的品牌数为"+brand.getLength());
      for(int i=0;i<brand.getLength();i++){
          //获取节点的所有属性值
          NamedNodeMap attributes=brand.item(i).getAttributes();
          //通过属性的name获取属性的Node对象
          Node name=attributes.getNameItem("name");
          //通过属性Node都西昂的getNodeValue方法,获取他的值
          System.out.println(name.getNodeValue());
          NodeList childNodes=brand.item(i).getChildNodes();
          for(int j=0;j<childNode.getLength();j++){
              if(childNodes.item(j),getNodeType()==1){
                  NamedNodeMap attributes1=childNodes.item(j).getAttributes();
                  Node name1=attributes1.getNamedItem("name");
                  System.out.println(name1.getNodeValue());
                  //System.out.println("-----------");
                  //或者,可以直接通过这样获取
                  //System.out.println(((Elemnt)childNodes.item(j)).getAttributes("name"));
                  //if({"123123".equals(name1.getNodeValue())){
                  //如果想要获取元素中间的文本,则使用图下方法
                  //System.out.println(((Element)childNodes.item(j)).getTextContent());
                  //}
              }
          }
      }
  }

3.2、 写入新的xml文件

  package Day26;
  /*
      使用DOM复制一个文件
   */
  import org.w3c.dom.Document;
  import org.xml.sax.SAXException;
  ​
  import javax.xml.parsers.DocumentBuilder;
  import javax.xml.parsers.DocumentBuilderFactory;
  import javax.xml.parsers.ParserConfigurationException;
  import javax.xml.transform.*;
  import javax.xml.transform.dom.DOMSource;
  import javax.xml.transform.stream.StreamResult;
  import java.io.*;
  //dom读取(不用工具完整版)
  public class Test {
      public static void main(String[] args) {
          //获取TransFormerFactory工厂对象
          TransformerFactory factory=TransformerFactory.newInstance();
          //indent-number表示缩进位置
          factory.setAttribute("indent-number",4);
          try {
              //通过工厂对象,获得我们的Transformer对象
              Transformer transformer= factory.newTransformer();
              //1、创建解析器工厂对象
              DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance();
              //2、解析器工厂对象创建解析器对象
              DocumentBuilder db=documentBuilderFactory.newDocumentBuilder();
              //3、解析器都西昂指定XML文件创建Document对象
              Document document=db.parse(new File("src/Day25/收藏信息.xml"));
              //设置我们将会输出的字符集
              transformer.setOutputProperty(OutputKeys.ENCODING,"UTF-8");
              //制定了当输出结果数时,transformer是否可以添加额外的空白:其值必须为yes或no
              //yes会插入空白,no不会插入空白
              transformer.setOutputProperty(OutputKeys.INDENT,"yes");
  ​
              //创建StreamResult对象
              //包含保存文件的信息
              FileOutputStream fos = new FileOutputStream("收藏信息02");
              OutputStreamWriter out=new OutputStreamWriter((fos));
              StreamResult result=new StreamResult(out);
              //需要写入的信息
              DOMSource source=new DOMSource(document);
  ​
              try {
                  transformer.transform(source,result);
              } catch (TransformerException e) {
                  e.printStackTrace();
              }
              System.out.println("写入数据:");
  ​
          } catch (TransformerConfigurationException e) {
              e.printStackTrace();
          } catch (ParserConfigurationException e) {
              e.printStackTrace();
          } catch (IOException e) {
              e.printStackTrace();
          } catch (SAXException e) {
              e.printStackTrace();
          }
      }
  }

3.3、 Util工具类

 import org.w3c.dom.Document;
  import org.w3c.dom.Node;
  import org.xml.sax.SAXException;
  ​
  import javax.xml.parsers.DocumentBuilder;
  import javax.xml.parsers.DocumentBuilderFactory;
  import javax.xml.parsers.ParserConfigurati
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值