Java读取xml文件的四种方法

来源:互联网 发布:网络带给我们的坏处 编辑:程序博客网 时间:2024/05/29 12:31

xml文件:

  Xml代码


  <?xml version="1.0" encoding="GB2312"?>  
  <RESULT> 
  <VALUE> 
  <NO>A1234</NO> 
  <ADDR>河南省郑州市</ADDR> 
  </VALUE> 
  <VALUE> 
  <NO>B1234</NO> 
  <ADDR>河南省郑州市二七区</ADDR> 
  </VALUE> 
  </RESULT>

  第一种 DOM 实现方法:

  Java代码


    import java.io.File; 
  import javax.xml.parsers.DocumentBuilder; 
  import javax.xml.parsers.DocumentBuilderFactory; 
  import org.w3c.dom.Document; 
  import org.w3c.dom.NodeList; 
  public class MyXMLReader2DOM { 
  public static void main(String arge[]) { 
  long lasting = System.currentTimeMillis(); 
  try { 
  File f = new File("data_10k.xml"); 
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
  DocumentBuilder builder = factory.newDocumentBuilder(); 
  Document doc = builder.parse(f); 
  NodeList nl = doc.getElementsByTagName("VALUE"); 
  for (int i = 0; i < nl.getLength(); i++) { 
  System.out.print("车牌号码:"+ doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue()); 
  System.out.println("车主地址:"+ doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue()); 
  System.out.println("运行时间:" + (System.currentTimeMillis() - lasting) 
  + "毫秒"); 
  } 
  } 
  } catch (Exception e) { 
  e.printStackTrace(); 
  } 
  } 
  }

  第二种,DOM4J实现方法:

  Java代码


    import java.io.*; 
  import java.util.*; 
  import org.dom4j.*; 
  import org.dom4j.io.*; 
  public class MyXMLReader2DOM4J { 
  public static void main(String arge[]) { 
  long lasting = System.currentTimeMillis(); 
  try { 
  File f = new ClassPathResource("/data_10k.xml").getFile();
  SAXReader reader = new SAXReader(); 
  Document doc = reader.read(f); 
  Element root = doc.getRootElement(); 
  Element foo; 
  for (Iterator i = root.elementIterator("VALUE"); i.hasNext();) { 
  foo = (Element) i.next(); 
  System.out.print("车牌号码:" + foo.elementText("NO")); 
  System.out.println("车主地址:" + foo.elementText("ADDR")); 
  } 
  System.out.println("运行时间:" + (System.currentTimeMillis() - lasting) 
  + "毫秒"); 
  } 
  } catch (Exception e) { 
  e.printStackTrace(); 
  } 
  } 
  }

  第三种 JDOM实现方法:

  Java代码


    import java.io.*; 
  import java.util.*; 
  import org.jdom.*; 
  import org.jdom.input.*; 
  public class MyXMLReader2JDOM { 
  public static void main(String arge[]) { 
  long lasting = System.currentTimeMillis(); 
  try { 
  SAXBuilder builder = new SAXBuilder(); 
  Document doc = builder.build(new File("data_10k.xml")); 
  Element foo = doc.getRootElement(); 
  List allChildren = foo.getChildren(); 
  for (int i = 0; i < allChildren.size(); i++) { 
  System.out.print("车牌号码:"+ ((Element) allChildren.get(i)).getChild("NO").getText()); 
  System.out.println("车主地址:"+ ((Element) allChildren.get(i)).getChild("ADDR").getText()); 
  } 
  System.out.println("运行时间:" + (System.currentTimeMillis() - lasting) 
  + "毫秒"); 
  } 
  } catch (Exception e) { 
  e.printStackTrace(); 
  } 
  } 
  }

  第四种SAX实现方法:

  Java代码

 


 import javax.xml.parsers.SAXParser; 
  import javax.xml.parsers.SAXParserFactory; 
  import org.xml.sax.Attributes; 
  import org.xml.sax.InputSource; 
  import org.xml.sax.SAXException; 
  import org.xml.sax.helpers.DefaultHandler; 
  public class MyXMLReader2SAX extends DefaultHandler { 
  java.util.Stack tags = new java.util.Stack(); 
  public MyXMLReader2SAX() { 
  super(); 
  } 
  public static void main(String args[]) { 
  long lasting = System.currentTimeMillis(); 
  try { 
  SAXParserFactory sf = SAXParserFactory.newInstance(); 
  SAXParser sp = sf.newSAXParser(); 
  MyXMLReader2SAX reader = new MyXMLReader2SAX(); 
  sp.parse(new InputSource("data_10k.xml"), reader); 
  } catch (Exception e) { 
  e.printStackTrace(); 
  } 
  System.out.println("运行时间:" + (System.currentTimeMillis() - lasting) 
  + "毫秒"); 
  } 
  public void characters(char ch[], int start, int length) 
  throws SAXException { 
  String tag = (String) tags.peek(); 
  if (tag.equals("NO")) { 
  System.out.print("车牌号码:" + new String(ch, start, length)); 
  } 
  if (tag.equals("ADDR")) { 
  System.out.println("地址:" + new String(ch, start, length)); 
  } 
  } 
  public void startElement(String uri, String localName, String qName, 
  Attributes attrs) { 
  tags.push(qName); 
  } 
  }


转载代码:


  1. SAXReader reader = new SAXReader();
  2. Document doc = reader.read(...);
  3. List childNodes = doc.selectNodes("//Config/Child/ChildNode");
  4. for(Object obj:childNodes) {
  5. Node childNode = (Node)obj;
  6. String name = childNode.valueOf("@name");
  7. String text = childNode.getText();
  8. }
  9. 一.Document对象相关
  10. 1.读取XML文件,获得document对象.
  11. SAXReader reader = new SAXReader();
  12. Document document = reader.read(new File("input.xml"));
  13. 2.解析XML形式的文本,得到document对象.
  14. String text = "<members></members>";
  15. Document document = DocumentHelper.parseText(text);
  16. 3.主动创建document对象.
  17. Document document = DocumentHelper.createDocument();
  18. Element root = document.addElement("members");// 创建根节点
  19. 二.节点相关
  20. 1.获取文档的根节点.
  21. Element rootElm = document.getRootElement();
  22. 2.取得某节点的单个子节点.
  23. Element memberElm=root.element("member");// "member"是节点名
  24. 3.取得节点的文字
  25. String text=memberElm.getText();也可以用:
  26. String text=root.elementText("name");这个是取得根节点下的name字节点的文字.
  27. 4.取得某节点下名为"member"的所有字节点并进行遍历.
  28. List nodes = rootElm.elements("member");
  29. for (Iterator it = nodes.iterator(); it.hasNext();) {
  30. Element elm = (Element) it.next();
  31. // do something
  32. }
  33. 5.对某节点下的所有子节点进行遍历.
  34. for(Iterator it=root.elementIterator();it.hasNext();){
  35. Element element = (Element) it.next();
  36. // do something
  37. }
  38. 6.在某节点下添加子节点.
  39. Element ageElm = newMemberElm.addElement("age");
  40. 7.设置节点文字.
  41. ageElm.setText("29");
  42. 8.删除某节点.
  43. parentElm.remove(childElm);// childElm是待删除的节点,parentElm是其父节点
  44. 9.添加一个CDATA节点.
  45. Element contentElm = infoElm.addElement("content");
  46. contentElm.addCDATA(diary.getContent());
  47. 三.属性相关.
  48. 1.取得某节点下的某属性
  49. Element root=document.getRootElement();
  50. Attribute attribute=root.attribute("size");// 属性名name
  51. 2.取得属性的文字
  52. String text=attribute.getText();也可以用:
  53. String text2=root.element("name").attributeValue("firstname");这个是取得根节点下name字节点的属性firstname的值.
  54. 3.遍历某节点的所有属性
  55. Element root=document.getRootElement();
  56. for(Iterator it=root.attributeIterator();it.hasNext();){
  57. Attribute attribute = (Attribute) it.next();
  58. String text=attribute.getText();
  59. System.out.println(text);
  60. }
  61. 4.设置某节点的属性和文字.
  62. newMemberElm.addAttribute("name""sitinspring");
  63. 5.设置属性的文字
  64. Attribute attribute=root.attribute("name");
  65. attribute.setText("sitinspring");
  66. 6.删除某属性
  67. Attribute attribute=root.attribute("size");// 属性名name
  68. root.remove(attribute);
  69. 四.将文档写入XML文件.
  70. 1.文档中全为英文,不设置编码,直接写入的形式.
  71. XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));
  72. writer.write(document);
  73. writer.close();
  74. 2.文档中含有中文,设置编码格式写入的形式.
  75. OutputFormat format = OutputFormat.createPrettyPrint();
  76. format.setEncoding("GBK"); // 指定XML编码
  77. XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);
  78. writer.write(document);
  79. writer.close();
  80. 五.字符串与XML的转换
  81. 1.将字符串转化为XML
  82. String text = "<members> <member>sitinspring</member> </members>";
  83. Document document = DocumentHelper.parseText(text);
  84. 2.将文档或节点的XML转化为字符串.
  85. SAXReader reader = new SAXReader();
  86. Document document = reader.read(new File("input.xml"));
  87. Element root=document.getRootElement();
  88. String docXmlText=document.asXML();
  89. String rootXmlText=root.asXML();
  90. Element memberElm=root.element("member");
  91. String memberXmlText=memberElm.asXML();
  92. dom4j API 包含一个解析 XML 文档的工具。本文中将使用这个解析器创建一个示例 XML 文档。清单 1 显示了这个示例 XML 文档,catalog.xml。
  93. 清单 1. 示例 XML 文档(catalog.xml)
  94. <?xml version="1.0" encoding="UTF-8"?>
  95. <catalog>
  96. <!--An XML Catalog-->
  97. <?target instruction?>
  98. <journal title="XML Zone"
  99. publisher="IBM developerWorks">
  100. <article level="Intermediate" date="December-2001">
  101. <title>Java configuration with XML Schema</title>
  102. <author>
  103. <firstname>Marcello</firstname>
  104. <lastname>Vitaletti</lastname>
  105. </author>
  106. </article>
  107. </journal>
  108. </catalog>
  109. 然后使用同一个解析器修改 catalog.xml,清单 2 是修改后的 XML 文档,catalog-modified.xml。
  110. 清单 2. 修改后的 XML 文档(catalog-modified.xml)
  111. <?xml version="1.0" encoding="UTF-8"?>
  112. <catalog>
  113. <!--An XML catalog-->
  114. <?target instruction?>
  115. <journal title="XML Zone"
  116. publisher="IBM developerWorks">
  117. <article level="Introductory" date="October-2002">
  118. <title>Create flexible and extensible XML schemas</title>
  119. <author>
  120. <firstname>Ayesha</firstname>
  121. <lastname>Malik</lastname>
  122. </author>
  123. </article>
  124. </journal>
  125. </catalog>
  126. 与 W3C DOM API 相比,使用 dom4j 所包含的解析器的好处是 dom4j 拥有本地的 XPath 支持。DOM 解析器不支持使用 XPath 选择节点。
  127. 本文包括以下几个部分:
  128. 预先设置
  129. 创建文档
  130. 修改文档
  131. 预先设置
  132. 这个解析器可以从 http://dom4j.org 获 取。通过设置使 dom4j-1.4/dom4j-full.jar 能够在 classpath 中访问,该文件中包括 dom4j 类、XPath 引擎以及 SAX 和 DOM 接口。如果已经使用了 JAXP 解析器中包含的 SAX 和 DOM 接口,向 classpath 中增 加 dom4j-1.4/dom4j.jar 。 dom4j.jar 包括 dom4j 类和 XPath 引擎,但是不含 SAX 与 DOM 接 口。
  133. 回页首
  134. 创建文档
  135. 本节讨论使用 dom4j API 创建 XML 文档的过程,并创建示例 XML 文档 catalog.xml。
  136. 使用 import 语句导入 dom4j API 类:
  137. import org.dom4j.Document;
  138. import org.dom4j.DocumentHelper;
  139. import org.dom4j.Element;
  140. 使用 DocumentHelper 类创建一个文档实例。 DocumentHelper 是生成 XML 文档节点的 dom4j API 工厂类。
  141. Document document = DocumentHelper.createDocument();
  142. 使用 addElement() 方法创建根元素 catalog 。 addElement() 用于向 XML 文档中增加元素。
  143. Element catalogElement = document.addElement("catalog");
  144. 在 catalog 元素中使用 addComment() 方法添加注释“An XML catalog”。
  145. catalogElement.addComment("An XML catalog");
  146. 在 catalog 元素中使用 addProcessingInstruction() 方法增加一个处理指令。
  147. catalogElement.addProcessingInstruction("target","text");
  148. 在 catalog 元素中使用 addElement() 方法增加 journal 元素。
  149. Element journalElement = catalogElement.addElement("journal");
  150. 使用 addAttribute() 方法向 journal 元素添加 title 和 publisher 属性。
  151. journalElement.addAttribute("title""XML Zone");
  152. journalElement.addAttribute("publisher""IBM developerWorks");
  153. 向 article 元素中添加 journal 元素。
  154. Element articleElement=journalElement.addElement("article");
  155. 为 article 元素增加 level 和 date 属性。
  156. articleElement.addAttribute("level""Intermediate");
  157. articleElement.addAttribute("date""December-2001");
  158. 向 article 元素中增加 title 元素。
  159. Element titleElement=articleElement.addElement("title");
  160. 使用 setText() 方法设置 article 元素的文本。
  161. titleElement.setText("Java configuration with XML Schema");
  162. 在 article 元素中增加 author 元素。
  163. Element authorElement=articleElement.addElement("author");
  164. 在 author 元素中增加 firstname 元素并设置该元素的文本。
  165. Element firstNameElement=authorElement.addElement("firstname");
  166. firstNameElement.setText("Marcello");
  167. 在 author 元素中增加 lastname 元素并设置该元素的文本。
  168. Element lastNameElement=authorElement.addElement("lastname");
  169. lastNameElement.setText("Vitaletti");
  170. 可以使用 addDocType() 方法添加文档类型说明。
  171. document.addDocType("catalog"null,"file://c:/Dtds/catalog.dtd");
  172. 这样就向 XML 文档中增加文档类型说明:
  173. <!DOCTYPE catalog SYSTEM "file://c:/Dtds/catalog.dtd">
  174. 如果文档要使用文档类型定义(DTD)文档验证则必须有 Doctype。
  175. XML 声明 <?xml version="1.0" encoding="UTF-8"?> 自动添加到 XML 文档中。
  176. 清单 3 所示的例子程序 XmlDom4J.java 用于创建 XML 文档 catalog.xml。
  177. 清单 3. 生成 XML 文档 catalog.xml 的程序(XmlDom4J.java)
  178. import org.dom4j.Document;
  179. import org.dom4j.DocumentHelper;
  180. import org.dom4j.Element;
  181. import org.dom4j.io.XMLWriter;
  182. import java.io.*;
  183. public class XmlDom4J{
  184. public void generateDocument(){
  185. Document document = DocumentHelper.createDocument();
  186. Element catalogElement = document.addElement("catalog");
  187. catalogElement.addComment("An XML Catalog");
  188. catalogElement.addProcessingInstruction("target","text");
  189. Element journalElement = catalogElement.addElement("journal");
  190. journalElement.addAttribute("title""XML Zone");
  191. journalElement.addAttribute("publisher""IBM developerWorks");
  192. Element articleElement=journalElement.addElement("article");
  193. articleElement.addAttribute("level""Intermediate");
  194. articleElement.addAttribute("date""December-2001");
  195. Element titleElement=articleElement.addElement("title");
  196. titleElement.setText("Java configuration with XML Schema");
  197. Element authorElement=articleElement.addElement("author");
  198. Element firstNameElement=authorElement.addElement("firstname");
  199. firstNameElement.setText("Marcello");
  200. Element lastNameElement=authorElement.addElement("lastname");
  201. lastNameElement.setText("Vitaletti");
  202. document.addDocType("catalog",
  203. null,"file://c:/Dtds/catalog.dtd");
  204. try{
  205. XMLWriter output = new XMLWriter(
  206. new FileWriter( new File("c:/catalog/catalog.xml") ));
  207. output.write( document );
  208. output.close();
  209. }
  210. catch(IOException e){System.out.println(e.getMessage());}
  211. }
  212. public static void main(String[] argv){
  213. XmlDom4J dom4j=new XmlDom4J();
  214. dom4j.generateDocument();
  215. }}
  216. 这一节讨论了创建 XML 文档的过程,下一节将介绍使用 dom4j API 修改这里创建的 XML 文档。
  217. 回页首
  218. 修改文档
  219. 这一节说明如何使用 dom4j API 修改示例 XML 文档 catalog.xml。
  220. 使用 SAXReader 解析 XML 文档 catalog.xml:
  221. SAXReader saxReader = new SAXReader();
  222. Document document = saxReader.read(inputXml);
  223. SAXReader 包含在 org.dom4j.io 包中。
  224. inputXml 是 从 c:/catalog/catalog.xml 创建的 java.io.File。使用 XPath 表达式从 article 元素中获 得 level 节点列表。如果 level 属性值是“Intermediate”则改为“Introductory”。
  225. List list = document.selectNodes("//article/@level" );
  226. Iterator iter=list.iterator();
  227. while(iter.hasNext()){
  228. Attribute attribute=(Attribute)iter.next();
  229. if(attribute.getValue().equals("Intermediate"))
  230. attribute.setValue("Introductory");
  231. }
  232. 获取 article 元素列表,从 article 元素中的 title 元素得到一个迭代器,并修改 title 元素的文本。
  233. list = document.selectNodes("//article" );
  234. iter=list.iterator();
  235. while(iter.hasNext()){
  236. Element element=(Element)iter.next();
  237. Iterator iterator=element.elementIterator("title");
  238. while(iterator.hasNext()){
  239. Element titleElement=(Element)iterator.next();
  240. if(titleElement.getText().equals("Java configuration with XML Schema"))
  241. titleElement.setText("Create flexible and extensible XML schema");
  242. }}
  243. 通过和 title 元素类似的过程修改 author 元素。
  244. 清单 4 所示的示例程序 Dom4JParser.java 用于把 catalog.xml 文档修改成 catalog-modified.xml 文档。
  245. 清单 4. 用于修改 catalog.xml 的程序(Dom4Jparser.java)
  246. import org.dom4j.Document;
  247. import org.dom4j.Element;
  248. import org.dom4j.Attribute;
  249. import java.util.List;
  250. import java.util.Iterator;
  251. import org.dom4j.io.XMLWriter;
  252. import java.io.*;
  253. import org.dom4j.DocumentException;
  254. import org.dom4j.io.SAXReader;
  255. public class Dom4JParser{
  256. public void modifyDocument(File inputXml){
  257. try{
  258. SAXReader saxReader = new SAXReader();
  259. Document document = saxReader.read(inputXml);
  260. List list = document.selectNodes("//article/@level" );
  261. Iterator iter=list.iterator();
  262. while(iter.hasNext()){
  263. Attribute attribute=(Attribute)iter.next();
  264. if(attribute.getValue().equals("Intermediate"))
  265. attribute.setValue("Introductory");
  266. }
  267. list = document.selectNodes("//article/@date" );
  268. iter=list.iterator();
  269. while(iter.hasNext()){
  270. Attribute attribute=(Attribute)iter.next();
  271. if(attribute.getValue().equals("December-2001"))
  272. attribute.setValue("October-2002");
  273. }
  274. list = document.selectNodes("//article" );
  275. iter=list.iterator();
  276. while(iter.hasNext()){
  277. Element element=(Element)iter.next();
  278. Iterator iterator=element.elementIterator("title");
  279. while(iterator.hasNext()){
  280. Element titleElement=(Element)iterator.next();
  281. if(titleElement.getText().equals("Java configuration with XML
  282. Schema"))
  283. titleElement.setText("Create flexible and extensible XML schema");
  284. }
  285. }
  286. list = document.selectNodes("//article/author" );
  287. iter=list.iterator();
  288. while(iter.hasNext()){
  289. Element element=(Element)iter.next();
  290. Iterator iterator=element.elementIterator("firstname");
  291. while(iterator.hasNext()){
  292. Element firstNameElement=(Element)iterator.next();
  293. if(firstNameElement.getText().equals("Marcello"))
  294. firstNameElement.setText("Ayesha");
  295. }
  296. }
  297. list = document.selectNodes("//article/author" );
  298. iter=list.iterator();
  299. while(iter.hasNext()){
  300. Element element=(Element)iter.next();
  301. Iterator iterator=element.elementIterator("lastname");
  302. while(iterator.hasNext()){
  303. Element lastNameElement=(Element)iterator.next();
  304. if(lastNameElement.getText().equals("Vitaletti"))
  305. lastNameElement.setText("Malik");
  306. }
  307. }
  308. XMLWriter output = new XMLWriter(
  309. new FileWriter( new File("c:/catalog/catalog-modified.xml") ));
  310. output.write( document );
  311. output.close();
  312. }
  313. catch(DocumentException e)
  314. {
  315. System.out.println(e.getMessage());
  316. }
  317. catch(IOException e){
  318. System.out.println(e.getMessage());
  319. }
  320. }
  321. public static void main(String[] argv){
  322. Dom4JParser dom4jParser=new Dom4JParser();
  323. dom4jParser.modifyDocument(new File("c:/catalog/catalog.xml"));
  324. }
  325. }

0 0
原创粉丝点击