java DOM和XML的转换

来源:互联网 发布:oracle如何删除数据库 编辑:程序博客网 时间:2024/06/05 22:29

Java使用面向对象将XML文件进行抽象,封装成了Document对象。将XML文件转换为Document文档的过程以及对应的Java代码:

1)获取Document的构造器工厂实例
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();

2)创建XML构造器的DocumentBuilder实例
DocumentBuilder docBuilder = dbf.newDocumentBuilder()

3)Document文档对象
Document doc = docBuilder.parse(xmlName);

一、读取xml文件内容:
例:F盘有一个school.xml文件,现读取里面的根元素并且将根节点各个子元素的信息完整的输出来:

[html] view plain copy
  1. <?xml version = "1.0" encoding = "utf-8"?>  
  2. <School>  
  3.     <Student>  
  4.         <Name>沈浪</Name>  
  5.         <Num>1006010022</Num>  
  6.         <Classes>信管2</Classes>  
  7.         <Address>浙江杭州3</Address>  
  8.         <Tel>123456</Tel>  
  9.     </Student>  
  10.     <Student>  
  11.         <Name>沈1</Name>  
  12.         <Num>1006010033</Num>  
  13.         <Classes>信管1</Classes>  
  14.         <Address>浙江杭州4</Address>  
  15.         <Tel>234567</Tel>  
  16.     </Student>  
  17.     <Student>  
  18.         <Name>沈2</Name>  
  19.         <Num>1006010044</Num>  
  20.         <Classes>生工2</Classes>  
  21.         <Address>浙江杭州1</Address>  
  22.         <Tel>345678</Tel>  
  23.     </Student>  
  24.     <Student>  
  25.         <Name>沈3</Name>  
  26.         <Num>1006010055</Num>  
  27.         <Classes>电子2</Classes>  
  28.         <Address>浙江杭州2</Address>  
  29.         <Tel>456789</Tel>  
  30.     </Student>  
  31. </School>  

[java] view plain copy
  1. package domxml;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5.   
  6. //import javax.lang.model.element.Element;  
  7. import javax.xml.parsers.DocumentBuilder;  
  8. import javax.xml.parsers.DocumentBuilderFactory;  
  9. import javax.xml.parsers.ParserConfigurationException;  
  10.   
  11. import org.w3c.dom.Document;  
  12. import org.w3c.dom.Element;  
  13. import org.w3c.dom.Node;  
  14. import org.w3c.dom.NodeList;  
  15. import org.xml.sax.SAXException;  
  16.   
  17. public class MyDOM {  
  18.     public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException {  
  19.         File file = new File("F:" + File.separator + "school.xml");  
  20.         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  
  21.         DocumentBuilder documentBuilder = dbf.newDocumentBuilder();  
  22.         Document doc = documentBuilder.parse(file);  
  23.         Element ele=doc.getDocumentElement();  //获取根节点  
  24.         System.out.println("根节点:"+ele.getTagName());  
  25.           
  26.         NodeList list=doc.getElementsByTagName("Student");//获取所有名为Student的节点  
  27.           
  28.         for(int i=0;i<list.getLength();i++){  
  29.             System.out.println("Student"+i+"节点:");  
  30.             Element node=(Element)list.item(i);  
  31.             System.out.println("Name:"+node.getElementsByTagName("Name").item(0).getFirstChild().getNodeValue());  
  32.             System.out.println("Num:"+node.getElementsByTagName("Num").item(0).getFirstChild().getNodeValue());  
  33.             System.out.println("Classes:"+node.getElementsByTagName("Classes").item(0).getFirstChild().getNodeValue());  
  34.             System.out.println("Address:"+node.getElementsByTagName("Address").item(0).getFirstChild().getNodeValue());  
  35.             System.out.println("Tel:"+node.getElementsByTagName("Tel").item(0).getFirstChild().getNodeValue());  
  36.             System.out.println();  
  37.         }  
  38.           
  39.           
  40.     }  
  41. }  

控制台输出如下:

根节点:School
Student0节点:
Name:沈浪
Num:1006010022
Classes:信管2
Address:浙江杭州3
Tel:123456

Student1节点:
Name:沈1
Num:1006010033
Classes:信管1
Address:浙江杭州4
Tel:234567

Student2节点:
Name:沈2
Num:1006010044
Classes:生工2
Address:浙江杭州1
Tel:345678

Student3节点:
Name:沈3
Num:1006010055
Classes:电子2
Address:浙江杭州2
Tel:456789

二、生成XML文件:

使用DOM方式生成XML文件有如下几步:

1、首先是创建DOM树(即规定XML文件中的内容):

创建DocumentBuilderFactory对象
通过DocumentBuilderFactory对象创建DocumentBuilder对象
通过DocumentBuilder对象的newDocument()方法创建一个Document对象,该对象代表一个XML文件
通过Document对象的createElement()方法创建根节点
通过Document对象的createElement()方法创建N个子节点,并为他们赋值,再将这些子节点添加到根节点下
将根节点添加到Document对象下


2、其次是将DOM树转换为XML文件:
创建TransformerFactory类的对象
通过TransformerFactory创建Transformer对象
使用Transformer对象的transform()方法将DOM树转换为XML文件。(该方法有两个参数,第一个参数为源数据,需要创建DOMSource对象并将Document加载到其中;第二个参数为目的文件,即要生成的XML文件,需要创建StreamResult对象并指定目的文件)


举例如下:

[java] view plain copy
  1. package createdom;  
  2.   
  3.   
  4. import java.io.File;  
  5.   
  6. import javax.xml.parsers.DocumentBuilder;  
  7. import javax.xml.parsers.DocumentBuilderFactory;  
  8. import javax.xml.parsers.ParserConfigurationException;  
  9. import javax.xml.transform.Source;  
  10. import javax.xml.transform.Transformer;  
  11. import javax.xml.transform.TransformerConfigurationException;  
  12. import javax.xml.transform.TransformerException;  
  13. import javax.xml.transform.TransformerFactory;  
  14. import javax.xml.transform.dom.DOMSource;  
  15. import javax.xml.transform.stream.StreamResult;  
  16.   
  17. import org.w3c.dom.Document;  
  18. import org.w3c.dom.Element;  
  19.   
  20. public class MyCreateXML {  
  21. public static void main(String[] args) {  
  22.     Document doc=createDom();//创建DOM树  
  23.     createXML(doc);  
  24. }  
  25.   
  26. public static Document createDom(){  
  27.     DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();  
  28.     DocumentBuilder builder=null;  
  29.     try {  
  30.         builder = factory.newDocumentBuilder();  
  31.     } catch (ParserConfigurationException e) {  
  32.         // TODO Auto-generated catch block  
  33.         //e.printStackTrace();  
  34.     }  
  35.     Document doc=builder.newDocument();  
  36.     Element ele= doc.createElement("School");//创建根节点  
  37.       
  38.     Element student1=doc.createElement("Student");//第一个子节点  
  39.     Element name=doc.createElement("Name");  
  40.     name.setTextContent("张三");  
  41.     student1.appendChild(name);  
  42.     Element num1=doc.createElement("Num");  
  43.     num1.setTextContent("0001");  
  44.     student1.appendChild(num1);  
  45.     Element classes1=doc.createElement("Classes");  
  46.     classes1.setTextContent("计算机科学与技术");  
  47.     student1.appendChild(classes1);  
  48.     ele.appendChild(student1);  
  49.       
  50.     Element student2=doc.createElement("Student");//第二个子节点  
  51.     Element name2=doc.createElement("Name");  
  52.     name2.setTextContent("李四");  
  53.     student2.appendChild(name2);  
  54.     Element num2=doc.createElement("Num");  
  55.     num2.setTextContent("0002");  
  56.     student2.appendChild(num2);  
  57.     Element classes2=doc.createElement("Classes");  
  58.     classes2.setTextContent("软件工程");  
  59.     student2.appendChild(classes2);  
  60.     ele.appendChild(student2);  
  61.       
  62.     doc.appendChild(ele);  
  63.     return doc;  
  64.       
  65. }  
  66. private static void createXML(Document doc) {  
  67.     TransformerFactory factory=TransformerFactory.newInstance();  
  68.     Transformer transformer=null;  
  69.     try {  
  70.         transformer=factory.newTransformer();  
  71.     } catch (TransformerConfigurationException e) {  
  72.           
  73.     }  
  74.     File f=new File("F:"+File.separator+"school1.xml");  
  75.     StreamResult outputTarget=new StreamResult(f);  
  76.     try {  
  77.         transformer.transform(new DOMSource(doc), outputTarget);  
  78.     } catch (TransformerException e) {  
  79.         // TODO Auto-generated catch block  
  80.     //  e.printStackTrace();  
  81.     }  
  82. }  
  83. }  

打开F盘的school1.xml,内容如下:

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>  
  2.    <School>    
  3.         <Student>  
  4.              <Name>张三</Name>  
  5.              <Num>0001</Num>  
  6.              <Classes>计算机科学与技术</Classes>  
  7.         </Student>   
  8.   
  9.         <Student>   
  10.             <Name>李四</Name>  
  11.             <Num>0002</Num>  
  12.             <Classes>软件工程</Classes>  
  13.         </Student>  
  14.    </School>  
原创粉丝点击