欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java-XML

程序员文章站 2022-08-21 12:44:47
dom4j ......
 1 import java.io.file;
 2 import java.io.fileinputstream;
 3 import java.io.inputstream;
 4 import javax.xml.parsers.documentbuilder;
 5 import javax.xml.parsers.documentbuilderfactory;
 6 import org.w3c.dom.document;
 7 import org.w3c.dom.element;
 8 import org.w3c.dom.node;
 9 import org.w3c.dom.nodelist;
10 
11 /**
12  *    读取xml文件1 
13  */
14 public class xmlreader {
15      public static void main(string[] args) {   
16         xmlreader reader = new xmlreader();   
17     }   
18     public  xmlreader(){   
19         //得到 dom 解析器的工厂实例  
20         documentbuilderfactory domfac = documentbuilderfactory.newinstance();   
21         try {   
22             //从 dom 工厂获得 dom 解析器
23             documentbuilder dombuilder = domfac.newdocumentbuilder();   
24             //把要解析的 xml 文档转化为输入流,以便 dom 解析器解析它
25             inputstream is = new fileinputstream(new file("languages.xml"));  
26             //解析 xml 文档的输入流,得到一个 document
27             document doc = dombuilder.parse(is);   
28             //获到 xml 文档的根节点
29             element root = doc.getdocumentelement();  
30             //获到节点的子节点
31             nodelist books = root.getchildnodes();   
32             if(books!=null){   
33                 for (int i = 0; i < books.getlength(); i++) {   
34                     node book = books.item(i);   
35                     //node.text_node         文本节点
36                     //node.document_node     文档节点
37                     //node.entity_node         实体节点
38                     //node.attribute_node     属性节点
39                     //node.element_node     元素节点
40                      if(book.getnodetype()==node.element_node) {  //判断节点类型是元素节点时
41                         //取得节点的属性值,节点的属性也是它的子节点。它的节点类型也是node.element_node
42                         string email = book.getattributes().getnameditem("id").getnodevalue();   
43                        
44                         //轮循子节点   
45                         for(node node=book.getfirstchild();node!=null;node=node.getnextsibling()) {   
46                             //因为节点中包含了元素节点、属性节点、文本节点等。
47                             if(node.getnodetype()==node.element_node) {   //判断节点类型是元素节点时
48                                 if(node.getnodename().equals("name")) {   
49                                     string name1 = node.getfirstchild().getnodevalue();   
50                                     system.out.println(name1);   
51                                 }   
52                                 if(node.getnodename().equals("ide")) {   
53                                     string price=node.getfirstchild().getnodevalue();   
54                                     system.out.println(price);   
55                                 }   
56                             }   
57                         }   
58                      }   
59                 }   
60             }   
61         } catch (exception e) {   
62             e.printstacktrace();   
63         }   
64     }   
65 }
 
1 //languages.xml
2 
3 <?xml version="1.0" encoding="utf-8"?>
4 <languages cat="it">
5     <lan id="1">
6         <name>java</name>
7         <ide>eclipse</ide>
8     </lan>
9 </languages>


1 import java.io.file; 2 import java.io.ioexception; 3 4 import javax.xml.parsers.documentbuilder; 5 import javax.xml.parsers.documentbuilderfactory; 6 import javax.xml.parsers.parserconfigurationexception; 7 8 import org.w3c.dom.document; 9 import org.w3c.dom.element; 10 import org.w3c.dom.node; 11 import org.w3c.dom.nodelist; 12 import org.xml.sax.saxexception; 13 /** 14 * 读取xml文件2 15 * ( 1 )获取 dom 解析器的工厂实例 documentbuilderfactory domfac=documentbuilderfactory.newinstance(); 16 * ( 2 )从 dom 工厂获得 dom 解析器:documentbuilder dombuilder=domfac.newdocumentbuilder(); 17 * ( 3 )把要解析的 xml 文档转化为输入流,以便 dom 解析器解析它:inputstream is = new fileinputstream("test1.xml"); 18 * ( 4 )解析 xml 文档的输入流,得到一个 document:document doc = dombuilder.parse(is); 19 * 也可以根据file对象获取document对象:document document = builder.parse(new file("languages.xml")); 20 * ( 5 )得到 xml 文档的根节点:element root=doc.getdocumentelement(); 21 * ( 6 )得到节点的子节点:nodelist books=root.getchildnodes(); 22 */ 23 public class readxml { 24 public static void main(string[] args) { 25 try { 26 //获取 dom 解析器的工厂实例 27 documentbuilderfactory factory = documentbuilderfactory.newinstance(); 28 //从 dom 工厂获得 dom 解析器 29 documentbuilder builder = factory.newdocumentbuilder(); 30 //根据file对象获取document对象 31 document document = builder.parse(new file("./data/languages.xml")); 32 //根据document对象获取xml 文档的根节点 33 element root = document.getdocumentelement(); 34 35 string nodename = root.getnodename(); //获取节点名称 36 string attribute = root.getattribute("cat"); // 获取属性的值 37 38 nodelist list = root.getelementsbytagname("lan"); //根据节点名称获取节点集 39 for (int i = 0; i < list.getlength(); i++) { 40 element lan = (element) list.item(i); //获取节点集中的节点 41 string attribute2 = lan.getattribute("id"); //根据属性值 42 43 nodelist clist = lan.getchildnodes(); //获取节点下的所有子节点集 44 for (int j = 0; j < clist.getlength(); j++) { 45 node c = clist.item(j); //获取节点 46 if (c instanceof element) { 47 string elename = c.getnodename();//节点名称 48 string eletext = c.gettextcontent();//文本内容,标签之间的内容 49 system.out.println(elename + "=" + eletext); 50 } 51 } 52 } 53 } catch (parserconfigurationexception e) { 54 e.printstacktrace(); 55 } catch (saxexception e) { 56 e.printstacktrace(); 57 } catch (ioexception e) { 58 e.printstacktrace(); 59 } 60 } 61 }
 1 import java.io.file;
 2 import java.io.stringwriter;
 3 import javax.xml.parsers.documentbuilder;
 4 import javax.xml.parsers.documentbuilderfactory;
 5 import javax.xml.parsers.parserconfigurationexception;
 6 import javax.xml.transform.outputkeys;
 7 import javax.xml.transform.transformer;
 8 import javax.xml.transform.transformerconfigurationexception;
 9 import javax.xml.transform.transformerexception;
10 import javax.xml.transform.transformerfactory;
11 import javax.xml.transform.dom.domsource;
12 import javax.xml.transform.stream.streamresult;
13 import org.w3c.dom.document;
14 import org.w3c.dom.element;
15 
16 /**
17  * 创建并写入xml文件
18  * 使用dom方式生成xml文件有如下几步:
19  * 首先是创建dom树(即规定xml文件中的内容):
20  * 创建documentbuilderfactory对象
21  * 通过documentbuilderfactory对象创建documentbuilder对象
22  * 通过documentbuilder对象的newdocument()方法创建一个document对象,该对象代表一个xml文件
23  * 通过document对象的createelement()方法创建根节点
24  * 通过document对象的createelement()方法创建n个子节点,并为他们赋值,再将这些子节点添加到根节点下
25  * 将根节点添加到document对象下
26  */
27 public class creatxml {
28     public static void main(string[] args) {
29         try {
30             //获取dom 解析器的工厂实例 
31             documentbuilderfactory factory = documentbuilderfactory.newinstance();
32             //从 dom 工厂获得 dom 解析器
33             documentbuilder builder = factory.newdocumentbuilder();
34             //创建一个document对象,该对象代表一个xml文件
35             document document = builder.newdocument();
36             //设置xml声明中standalone为yes,即没有dtd和schema作为该xml的说明文档,且不显示该属性
37             document.setxmlstandalone(true);
38             //创建根节点
39             element root = document.createelement("languages");
40             
41             root.setattribute("cat", "it");//节点添加属性和属性值
42             
43             element lan1 = document.createelement("lan"); //创建节点
44             lan1.setattribute("id", "1"); //设置节点属性
45             
46             element name1 = document.createelement("name");//创建节点
47             name1.settextcontent("java"); //设置节点之间的内容
48             
49             element ide1 = document.createelement("ide");//创建节点
50             ide1.settextcontent("eclipse"); //设置节点之间的内容
51             
52             //向节点中添加子节点
53             lan1.appendchild(name1);
54             lan1.appendchild(ide1);
55             
56             //向根节点添加子节点
57             root.appendchild(lan1);
58             
59             //向文件中添加根节点
60             document.appendchild(root);
61             
62             /**
63              * 将dom树转换为xml文件:
64              * 创建transformerfactory类的对象
65              * 通过transformerfactory创建transformer对象
66              * 使用transformer对象的transform()方法将dom树转换为xml文件
67              * (该方法有两个参数,第一个参数为源数据,需要创建domsource对象并将document加载到其中;
68              *      第二个参数为目的文件,即要生成的xml文件,需要创建streamresult对象并指定目的文件)
69              */
70             //获取transformerfactory类的一个实例
71             transformerfactory transformerfactory = transformerfactory.newinstance();
72             //通过transformerfactory类的一个实例,创建transformer对象
73             transformer transformer = transformerfactory.newtransformer();
74             //设置输出时的编码
75             transformer.setoutputproperty("encoding", "utf-8");
76             transformer.setoutputproperty(outputkeys.indent, "yes");// 设置输出数据时换行
77             
78             
79             //将dom树转换为xml文件
80             //第一个参数为源数据,需要创建domsource对象并将document加载到其中
81             //第二个参数为目的文件,即要生成的xml文件,需要创建streamresult对象并指定目的文件
82             transformer.transform(new domsource(document), new streamresult(new file("./data/languages.xml")));
83             
84             
85             stringwriter writer = new stringwriter();
86             transformer.transform(new domsource(document), new streamresult(writer));
87             system.out.println(writer.tostring());//将流输出到控制台
88         } catch (parserconfigurationexception e) {
89             e.printstacktrace();
90         } catch (transformerconfigurationexception e) {
91             e.printstacktrace();
92         } catch (transformerexception e) {
93             e.printstacktrace();
94         }
95     }
96 }
  1 import java.io.file;
  2 import java.io.stringwriter;
  3 
  4 import javax.xml.parsers.documentbuilder;
  5 import javax.xml.parsers.documentbuilderfactory;
  6 import javax.xml.parsers.parserconfigurationexception;
  7 import javax.xml.transform.outputkeys;
  8 import javax.xml.transform.transformer;
  9 import javax.xml.transform.transformerconfigurationexception;
 10 import javax.xml.transform.transformerexception;
 11 import javax.xml.transform.transformerfactory;
 12 import javax.xml.transform.transformerfactoryconfigurationerror;
 13 import javax.xml.transform.dom.domsource;
 14 import javax.xml.transform.stream.streamresult;
 15 
 16 import org.w3c.dom.domexception;
 17 import org.w3c.dom.document;
 18 
 19 public class createconfigxmlutil {
 20     
 21     public document getdocument() {
 22         //创建一个document对象,该对象代表一个xml文件
 23         document document = null;;
 24         try {
 25             //获取dom 解析器的工厂实例 
 26             documentbuilderfactory factory = documentbuilderfactory.newinstance();
 27             //从 dom 工厂获得 dom 解析器
 28             documentbuilder builder = factory.newdocumentbuilder();
 29             document = builder.newdocument();
 30             //设置xml声明中standalone为yes,即没有dtd和schema作为该xml的说明文档,且不显示该属性
 31             document.setxmlstandalone(true);
 32         } catch (domexception e) {
 33             e.printstacktrace();
 34         } catch (parserconfigurationexception e) {
 35             e.printstacktrace();
 36         }
 37         return document;
 38     }
 39     
 40     /**
 41      * @title: xmltofile
 42      * @description: xml输出到文件
 43      * @param document
 44      * @param filepath
 45      * @return void  返回类型
 46      * @throws
 47      */
 48     public void xmltofile(document document,string filepath) {
 49         /**
 50          * 将dom树转换为xml文件:
 51          * 创建transformerfactory类的对象
 52          * 通过transformerfactory创建transformer对象
 53          * 使用transformer对象的transform()方法将dom树转换为xml文件
 54          * (该方法有两个参数,第一个参数为源数据,需要创建domsource对象并将document加载到其中;
 55          *      第二个参数为目的文件,即要生成的xml文件,需要创建streamresult对象并指定目的文件)
 56          */
 57         try {
 58             //获取transformerfactory类的一个实例
 59             transformerfactory transformerfactory = transformerfactory.newinstance();
 60             //通过transformerfactory类的一个实例,创建transformer对象
 61             transformer transformer = transformerfactory.newtransformer();
 62             //设置输出时的编码
 63             transformer.setoutputproperty("encoding", "utf-8");
 64             transformer.setoutputproperty(outputkeys.indent, "yes");// 设置输出数据时换行
 65             //将dom树转换为xml文件
 66             //第一个参数为源数据,需要创建domsource对象并将document加载到其中
 67             //第二个参数为目的文件,即要生成的xml文件,需要创建streamresult对象并指定目的文件
 68             //"./data/languages.xml"
 69             transformer.transform(new domsource(document),
 70                     new streamresult(new file(filepath)));
 71         } catch (transformerconfigurationexception e) {
 72             e.printstacktrace();
 73         } catch (illegalargumentexception e) {
 74             e.printstacktrace();
 75         } catch (transformerfactoryconfigurationerror e) {
 76             e.printstacktrace();
 77         } catch (transformerexception e) {
 78             e.printstacktrace();
 79         }
 80     }
 81     
 82     /**
 83      * @title: xmltoconsole
 84      * @description: xml输出到控制台
 85      * @param document
 86      * @return void  返回类型
 87      * @throws
 88      */
 89     public static void xmltoconsole(document document) {
 90         try {
 91             //获取transformerfactory类的一个实例
 92             transformerfactory transformerfactory = transformerfactory.newinstance();
 93             //通过transformerfactory类的一个实例,创建transformer对象
 94             transformer transformer = transformerfactory.newtransformer();
 95             //设置输出时的编码
 96             transformer.setoutputproperty("encoding", "utf-8");
 97             transformer.setoutputproperty(outputkeys.indent, "yes");// 设置输出数据时换行
 98             stringwriter writer = new stringwriter();
 99             transformer.transform(new domsource(document), new streamresult(writer));
100             system.out.println(writer.tostring());//将流输出到控制台
101         } catch (transformerconfigurationexception e) {
102             e.printstacktrace();
103         } catch (illegalargumentexception e) {
104             e.printstacktrace();
105         } catch (transformerfactoryconfigurationerror e) {
106             e.printstacktrace();
107         } catch (transformerexception e) {
108             e.printstacktrace();
109         }
110     }
111 }

 

dom4j

1 //test-xml-1.xml
2 
3 <?xml version="1.0" encoding="utf-8"?>
4 
5 <root>
6   <author name="james" location="uk">james strachan
7     <author name="bob" location="us">bob mcwhirter</author>
8   </author>
9 </root>

 

  1 public class dom4jxmlutil {
  2     
  3     public static void main(string[] args) {
  4         createxmlfile();
  5     }
  6     
  7     public static void createxmlfile() {
  8         try {
  9              document document = documenthelper.createdocument();
 10              element root = document.addelement("root");
 11              
 12              element ele = root.addelement("author")
 13                 .addattribute("name", "james") //节点属性 name=james
 14                 .addattribute("location", "uk")//节点属性 location=uk
 15                 .addtext("james strachan");//节点文本 james strachan
 16 
 17              ele.addelement("author")
 18                 .addattribute("name", "bob")
 19                 .addattribute("location", "us")
 20                 .addtext("bob mcwhirter");
 21             
 22             // 写入到一个新的文件中 
 23             writer(document,"./data/test-xml-1.xml");
 24         } catch (exception e) {
 25             e.printstacktrace();
 26         }
 27     }
 28     
 29     /** 
 30      * 把document对象写入新的文件 
 31      */  
 32     public static void writer(document document,string filepath) throws exception {  
 33         // 紧凑的格式  
 34         // outputformat format = outputformat.createcompactformat();  
 35         // 排版缩进的格式  
 36         outputformat format = outputformat.createprettyprint();  
 37         // 设置编码  
 38         format.setencoding("utf-8");  
 39         // 创建xmlwriter对象,指定了写出文件及编码格式  
 40         // xmlwriter writer = new xmlwriter(new filewriter(new  
 41         // file("src//a.xml")),format);  
 42         xmlwriter writer = new xmlwriter(new outputstreamwriter(  
 43                 new fileoutputstream(new file(filepath)), "utf-8"), format);  
 44         writer.write(document);// 写入    
 45         writer.flush();// 立即写入  
 46         writer.close();// 关闭操作    
 47     }  
 48     
 49     public void readxmldemo() throws exception {  
 50         // 创建saxreader对象  
 51         saxreader reader = new saxreader();  
 52         // 通过read方法读取一个文件 转换成document对象  
 53         document document = reader.read(new file("./data/test-xml-1.xml"));  
 54         element node = document.getrootelement();//获取根节点元素对象    
 55         //遍历所有的元素节点  
 56         listnodes(node); 
 57         //elementmethod(node);
 58     }
 59 
 60     /** 
 61      * 遍历当前节点元素下面的所有(元素的)子节点 
 62      */  
 63     public void listnodes(element node) {  
 64         string nodename = node.getname();//节点名称,标签名
 65         system.out.println("当前节点名称:"+nodename);
 66         // 获取当前节点的所有属性节点  
 67         @suppresswarnings("unchecked")
 68         list<attribute> list = node.attributes();//当前节点的所有属性节点,例如:name=james location=uk
 69         // 遍历属性节点  
 70         for (attribute attr : list) {  
 71             string attrtext = attr.gettext();//属性值
 72             string attrvalue = attr.getvalue();//属性值,与gettext()相同
 73             string attrname = attr.getname();//属性名称
 74             system.out.println(attrtext+"--"+attrvalue+"--"+attrname);
 75         }  
 76         
 77         if (!(node.gettexttrim().equals(""))) {  
 78             string nodetext = node.gettext();//节点文本值
 79             system.out.println(nodetext);
 80         }  
 81         //node.elementiterator("author");  指定某个节点,获取其下面子节点的迭代器
 82         @suppresswarnings("unchecked")
 83         iterator<element> it = node.elementiterator();//当前节点下子节点的迭代器 
 84         while (it.hasnext()) {  
 85             element e = it.next();// 获取某个子节点对象
 86             listnodes(e);// 对子节点进行遍历  
 87         }  
 88     }  
 89 
 90     /** 
 91      * 介绍element中的element方法和elements方法的使用 
 92      */  
 93     public void elementmethod(element node) {  
 94         // 获取node节点中,子节点的元素名称为supercars的元素节点。  
 95         element e = node.element("supercars");  
 96         // 获取supercars元素节点中,子节点为carname的元素节点(可以看到只能获取第一个carname元素节点)  
 97         element carname = e.element("carname");  
 98 
 99         string ename = e.getname();
100         string ctext = carname.gettext();
101         system.out.println(ename+"--"+ctext);
102 
103         // 获取supercars这个元素节点 中,所有子节点名称为carname元素的节点 。  
104         @suppresswarnings("unchecked")
105         list<element> carnames = e.elements("carname");  
106         for (element cname : carnames) {  
107             string text = cname.gettext();
108             system.out.println(text);//获取节点的文本值,也就是标签之前的内容
109         }  
110 
111         @suppresswarnings("unchecked")
112         list<element> elements = e.elements();// 获取supercars这个元素节点 所有元素的子节点。  
113         for (element el : elements) {  
114             string text = el.gettext();
115             system.out.println(text);//获取节点的文本值,也就是标签之前的内容  
116         }  
117     }  
118 }  
1         <!-- xml解析 -->
2         <dependency>
3             <groupid>dom4j</groupid>
4             <artifactid>dom4j</artifactid>
5             <version>1.6.1</version>
6         </dependency>