Dom生成Xml和解析Xml

Xml 专栏收录该内容
1 篇文章 1 订阅

xml这种文件格式在很多时候都是很适合我们用来存取数据的,所以利用程序来生成xml文件和解析xml文件就显得比较重要了。在dom中是把每一个元素都看做是一个节点Node的,所有页面上的属性、元素等都是继承自Node的,所以当获取到的是一个Node,而你知道它实际的类型并需要使用的时候就可能会需要进行类型转换了。

Element root = document.getDocumentElement();//获取根节点

下面是代码:

 

生成xml:

Java代码
  收藏代码
  1. public void geneXmlByDom() throws Exception {  
  2.         //step1:获得一个DocumentBuilderFactory  
  3.         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
  4.         //step2:获得一个DocumentBuilder  
  5.         DocumentBuilder db = factory.newDocumentBuilder();  
  6.         //step3:新建一个Document对象  
  7.         Document document = db.newDocument();  
  8.         //step4:创建一个根节点  
  9.         Element rootElement = document.createElement("Persons");  
  10.         for (int i=0;i<5;i++) {  
  11.             //step5:创建一个节点  
  12.             Element person = document.createElement("person");  
  13.             //step6:为该节点设定属性  
  14.             person.setAttribute("id""id_"+i);  
  15.             Element name = document.createElement("name");  
  16.             //为节点设定文本内容  
  17.             name.setTextContent("name_"+i);  
  18.             Element address = document.createElement("address");  
  19.             address.setTextContent("address_"+i);  
  20.             Element email = document.createElement("email");  
  21.             email.setTextContent("email_"+i);  
  22.             person.appendChild(name);  
  23.             person.appendChild(address);  
  24.             person.appendChild(email);  
  25.             //step7:为某一元素节点设立子节点  
  26.             rootElement.appendChild(person);  
  27.         }  
  28.         //step8:把刚刚建立的根节点添加到document对象中  
  29.         document.appendChild(rootElement);  
  30.         //step9:获得一个TransformerFactory对象  
  31.         TransformerFactory transformerFactory = TransformerFactory.newInstance();  
  32.         //step10:获得一个Transformer对象  
  33.         Transformer transformer = transformerFactory.newTransformer();  
  34.         //step11:把document对象用一个DOMSource对象包装起来  
  35.         Source xmlSource = new DOMSource(document);  
  36.         //step12:建立一个存储目标对象  
  37.         Result outputTarget = new StreamResult(new File("persons.xml"));  
  38.         //step13:生成相应的xml文件  
  39.         transformer.transform(xmlSource, outputTarget);  
  40.     }  

 

 生成的xml文件是这个样子

Xml代码
  收藏代码
  1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>  
  2. <Persons>  
  3.     <person id="id_0">  
  4.         <name>name_0</name>  
  5.         <address>address_0</address>  
  6.         <email>email_0</email>  
  7.     </person>  
  8.     <person id="id_1">  
  9.         <name>name_1</name>  
  10.         <address>address_1</address>  
  11.         <email>email_1</email>  
  12.     </person>  
  13.     <person id="id_2">  
  14.         <name>name_2</name>  
  15.         <address>address_2</address>  
  16.         <email>email_2</email>  
  17.     </person>  
  18.     <person id="id_3">  
  19.         <name>name_3</name>  
  20.         <address>address_3</address>  
  21.         <email>email_3</email>  
  22.     </person>  
  23.     <person id="id_4">  
  24.         <name>name_4</name>  
  25.         <address>address_4</address>  
  26.         <email>email_4</email>  
  27.     </person>  
  28. </Persons>  

 

在进行输出写到文件的时候可以设置一些Transformer输出的参数,如xml的编码,或者输出形式等。

Java代码
  收藏代码
  1. transformer.setOutputProperty("encoding""UTF-8");//设定文档编码,属性也可以使用OutputKeys的静态常量属性设定  
  2. transformer.setOutputProperty(OutputKeys.METHOD, "xml");//输出方式,可以是xml、html和text  

 

 

下面的解析也是基于这个文件的。

 

解析xml:

Java代码
  收藏代码
  1. public void parseXmlByDom() throws Exception {  
  2.         //step1:获得DocumentBuilderFactory  
  3.         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
  4.         //step2:获得DocumentBuilder  
  5.         DocumentBuilder db = factory.newDocumentBuilder();  
  6.         //step3:把需要解析的xml文件加载到一个document对象中  
  7.         Document document = db.parse("persons.xml");  
  8.         //获取所有名称为person的元素  
  9.         NodeList nodeList = document.getElementsByTagName("person");  
  10.         for (int i=0;i<nodeList.getLength();i++) {  
  11.             //因为这里我知道它就是一个Element对象,所以进行了强转  
  12.             Element person = (Element)nodeList.item(i);  
  13.             //获得Element对象的属性  
  14.             String id = person.getAttribute("id");  
  15.             //因为这里我知道只有一个对象,所以就直接item(0)了,  
  16.             //因为Dom是把每个对象都看做是一个节点的,所以如果在item(0)的时候直接取getNodeValue()是取不到值的,  
  17.             //只有是TextNode的时候用那个方法才可以取到值,如果想直接取值就用getTextContent()  
  18.             String name = person.getElementsByTagName("name").item(0).getTextContent();  
  19.             String address = person.getElementsByTagName("address").item(0).getTextContent();  
  20.             String email = person.getElementsByTagName("email").item(0).getTextContent();  
  21.             System.out.println(" id = "+id+" \r\n name = "+name+" \r\n address = "+address+" \r\n email = "+email);  
  22.             System.out.println("-------------------------------------");  
  23.         }  
  24.           
  25.     }  

 解析后输出的结果:

Java代码
  收藏代码
  1.  id = id_0   
  2.  name = name_0   
  3.  address = address_0   
  4.  email = email_0  
  5. -------------------------------------  
  6.  id = id_1   
  7.  name = name_1   
  8.  address = address_1   
  9.  email = email_1  
  10. -------------------------------------  
  11.  id = id_2   
  12.  name = name_2   
  13.  address = address_2   
  14.  email = email_2  
  15. -------------------------------------  
  16.  id = id_3   
  17.  name = name_3   
  18.  address = address_3   
  19.  email = email_3  
  20. -------------------------------------  
  21.  id = id_4   
  22.  name = name_4   
  23.  address = address_4   
  24.  email = email_4  
  25. -------------------------------------  

 

  • 0
    点赞
  • 0
    评论
  • 3
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:猿与汪的秘密 设计师:我叫白小胖 返回首页

打赏作者

elim168

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值