java解析xml文件

xml解析技术性能对比   转自:http://blog.youkuaiyun.com/zgf19930504/article/details/49506567     java 解析XML 的方法有很多, 常见的解析技术有 SAX 解析, DOM 解析, JDOM 解析, DOM4J 解析, JAXB解析等,其中SAX 解析采用的是流式解析,一遍过,不能折回解析,占用内存少; 而DOM ,JDOM,DOM4J,JAXB 解... 阅读详情

在java环境下读取xml文件的方法主要有4种:DOM、SAX、JDOM、JAXB


1.  DOM(Document Object Model)


此 方法主要由W3C提供,它将xml文件全部读入内存中,然后将各个元素组成一棵数据树,以便快速的访问各个节点 。 因此非常消耗系统性能 ,对比较大的文档不适宜采用DOM方法来解析。 DOM API 直接沿袭了 XML 规范。每个结点都可以扩展的基于 Node 的接口,就多态性的观点来讲,它是优秀的,但是在 Java 语言中的应用不方便,并且可读性不强。
实例:

Java代码 复制代码 收藏代码
  1. import javax.xml.parsers.*;  
  2. //XML解析器接口  
  3. import org.w3c.dom.*;  
  4. //XML的DOM实现  
  5. import org.apache.crimson.tree.XmlDocument; 
  6. //写XML文件要用到 
  7. DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
  8. //允许名字空间 
  9. factory.setNamespaceAware(true); 
  10. //允许验证 
  11. factory.setValidating(true); 
  12. //获得DocumentBuilder的一个实例 
  13. try {  
  14. DocumentBuilder builder = factory.newDocumentBuilder(); 
  15. } catch (ParserConfigurationException pce) {  
  16. System.err.println(pce); 
  17. //  出异常时输出异常信息,然后退出,下同 
  18. System.exit(1); 
  19. }  
  20. //解析文档,并获得一个Document实例。  
  21. try {  
  22. Document doc = builder.parse(fileURI); 
  23. } catch (DOMException dom) { 
  24. System.err.println(dom.getMessage()); 
  25. System.exit(1); 
  26. } catch (IOException ioe) { 
  27. System.err.println(ioe); 
  28. System.exit(1);      
  29. } 
  30. //获得根节点StuInfo 
  31. Element elmtStuInfo = doc.getDocumentElement(); 
  32. //得到所有student节点 
  33. NodeList nlStudent = elmtStuInfo.getElementsByTagNameNS( 
  34.                                        strNamespace, "student"); 
  35. for (……){ 
  36.      //当前student节点元素 
  37.      Element elmtStudent = (Element)nlStudent.item(i); 
  38.      NodeList nlCurrent =              elmtStudent.getElementsByTagNameNS( 
  39.                                      strNamespace, "name"); 
  40. } 
  1. import javax.xml.parsers.*;   
  2. //XML解析器接口   
  3. import org.w3c.dom.*;   
  4. //XML的DOM实现   
  5. import org.apache.crimson.tree.XmlDocument;  
  6. //写XML文件要用到  
  7. DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
  8.  //允许名字空间  
  9.  factory.setNamespaceAware(true);  
  10.  //允许验证  
  11.  factory.setValidating(true);  
  12.  //获得DocumentBuilder的一个实例  
  13. try {   
  14.  DocumentBuilder builder = factory.newDocumentBuilder();  
  15. } catch (ParserConfigurationException pce) {   
  16. System.err.println(pce);  
  17. //  出异常时输出异常信息,然后退出,下同  
  18. System.exit(1);  
  19. }   
  20. //解析文档,并获得一个Document实例。   
  21. try {   
  22. Document doc = builder.parse(fileURI);  
  23. } catch (DOMException dom) {  
  24. System.err.println(dom.getMessage());  
  25. System.exit(1);  
  26. } catch (IOException ioe) {  
  27. System.err.println(ioe);  
  28. System.exit(1);       
  29. }  
  30. //获得根节点StuInfo  
  31. Element elmtStuInfo = doc.getDocumentElement();  
  32. //得到所有student节点  
  33.  NodeList nlStudent = elmtStuInfo.getElementsByTagNameNS(  
  34.                                        strNamespace, "student");  
  35. for (……){  
  36.      //当前student节点元素  
  37.      Element elmtStudent = (Element)nlStudent.item(i);  
  38.      NodeList nlCurrent =              elmtStudent.getElementsByTagNameNS(  
  39.                                      strNamespace, "name");  
  40. }  

对于读取得方法其实是很简单的,写入xml文件也是一样不复杂。

Java代码 复制代码 收藏代码
  1. DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
  2. DocumentBuilder builder = null;  
  3. try {  
  4. builder = factory .newDocumentBuilder();  
  5. } catch (ParserConfigurationException pce) {  
  6. System.err.println(pce);  
  7. System.exit(1);  
  8. } 
  9. Document doc = null;  
  10. doc = builder .newDocument(); 
  11. //下面是建立XML文档内容的过程, 
  12. //先建立根元素"学生花名册"  
  13. Element root = doc.createElement("学生花名册");  
  14. //根元素添加上文档  
  15. doc.appendChild(root);  
  16. //建立"学生"元素,添加到根元素  
  17. Element student = doc.createElement("学生");  
  18. student.setAttribute("性别", studentBean.getSex());  
  19. root.appendChild(student);  
  20. //建立"姓名"元素,添加到学生下面,下同  
  21. Element name = doc.createElement("姓名");  
  22. student.appendChild(name);  
  23. Text tName = doc.createTextNode(studentBean.getName());  
  24. name.appendChild(tName); 
  25. Element age = doc.createElement("年龄");  
  26. student.appendChild(age);  
  27. Text tAge = doc.createTextNode(String.valueOf(studentBean.getAge()));  
  28. age.appendChild(tAge); 
  1. DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();   
  2. DocumentBuilder builder = null;   
  3. try {   
  4. builder = factory .newDocumentBuilder();   
  5. } catch (ParserConfigurationException pce) {   
  6. System.err.println(pce);   
  7. System.exit(1);   
  8. }  
  9. Document doc = null;   
  10. doc = builder .newDocument();  
  11. //下面是建立XML文档内容的过程,  
  12. //先建立根元素"学生花名册"   
  13. Element root = doc.createElement("学生花名册");   
  14. //根元素添加上文档   
  15. doc.appendChild(root);   
  16. //建立"学生"元素,添加到根元素   
  17. Element student = doc.createElement("学生");   
  18. student.setAttribute("性别", studentBean.getSex());   
  19. root.appendChild(student);   
  20. //建立"姓名"元素,添加到学生下面,下同   
  21. Element name = doc.createElement("姓名");   
  22. student.appendChild(name);   
  23. Text tName = doc.createTextNode(studentBean.getName());   
  24. name.appendChild(tName);  
  25. Element age = doc.createElement("年龄");   
  26. student.appendChild(age);   
  27. Text tAge = doc.createTextNode(String.valueOf(studentBean.getAge()));   
  28. age.appendChild(tAge);  

2.SAX (Simple API for XML)

此方法主要由XML-DEV 邮件列表的成员开发的,SAX是基于事件的方法,它很类似于标签库的处理机制,在标签开始、结束以及错误发生等等地方调用相应的接口实现方法,不是全部文 档都读入内存。 SAX具有优异的性能和利用更少的存储空间特点。SAX 的设计只考虑了功能的强大性,却没有考虑程序员使用起来是否方便。

使用必须扩展ContentHandler、ErrorHandler、DTDHandler等,但是必须扩展ContentHandler(或者DefaultHandler )。

Java代码 复制代码 收藏代码
  1. import org.xml.sax.*; 
  2. public  class  MyContentHandlerimplements ContentHandler { 
  3.   … … 
  4. } 
  5. /**
  6.      * 当其他某一个调用事件发生时,先调用此方法来在文档中定位。
  7.      * @param locator
  8.      */ 
  9.     public void setDocumentLocator(Locator locator){ 
  10.     } 
  11. /**
  12.      * 在解析整个文档开始时调用
  13.      * @throws SAXException
  14.      */ 
  15.     public void startDocument()throws SAXException{ 
  16.         System.out.println("** Student information start **"); 
  17.     } 
  18. /**
  19.      * 在解析整个文档结束时调用
  20.      * @throws SAXException
  21.      */ 
  22.     public void endDocument()throws SAXException{ 
  23.         System.out.println("**** Student information end ****"); 
  24.     } 
  25. /**
  26.      * 在解析名字空间开始时调用
  27.      * @param prefix
  28.      * @param uri
  29.      * @throws SAXException
  30.      */ 
  31.     public void startPrefixMapping(String prefix 
  32.         , String uri) throws SAXException{ 
  33.     } 
  34. /**
  35.      * 在解析名字空间结束时调用
  36.      * @param prefix
  37.      * @throws SAXException
  38.      */ 
  39.     public void endPrefixMapping(String prefix)throws SAXException{ 
  40.     } 
  41. /**
  42.      * 在解析元素开始时调用
  43.      * @param namespaceURI
  44.      * @param localName
  45.      * @param qName
  46.      * @param atts
  47.      * @throws SAXException
  48.      */ 
  49.     public void startElement(String namespaceURI, String localName 
  50.         , String qName, Attributes atts) throws SAXException{ 
  51.     } 
  52. /** 在解析元素结束时调用
  53.      * @param namespaceURI
  54.      * @param localName 本地名,如student
  55.      * @param qName 原始名,如LIT:student
  56.      * @throws SAXException   */ 
  57.     public void endElement(String namespaceURI, String localName,String qName)throws SAXException{ 
  58.   if (localName.equals(“student”)){ 
  59.             System.out.println(localName+":"+currentData); 
  60.         } 
  61. } 
  1. import org.xml.sax.*;  
  2. public  class  MyContentHandler implements ContentHandler {  
  3.   … …  
  4. }  
  5. /** 
  6.      * 当其他某一个调用事件发生时,先调用此方法来在文档中定位。 
  7.      * @param locator 
  8.      */  
  9.     public void setDocumentLocator(Locator locator){  
  10.     }  
  11. /** 
  12.      * 在解析整个文档开始时调用 
  13.      * @throws SAXException 
  14.      */  
  15.     public void startDocument() throws SAXException{  
  16.         System.out.println("** Student information start **");  
  17.     }  
  18. /** 
  19.      * 在解析整个文档结束时调用 
  20.      * @throws SAXException 
  21.      */  
  22.     public void endDocument() throws SAXException{  
  23.         System.out.println("**** Student information end ****");  
  24.     }  
  25. /** 
  26.      * 在解析名字空间开始时调用 
  27.      * @param prefix 
  28.      * @param uri 
  29.      * @throws SAXException 
  30.      */  
  31.     public void startPrefixMapping(String prefix  
  32.         , String uri) throws SAXException{  
  33.     }  
  34. /** 
  35.      * 在解析名字空间结束时调用 
  36.      * @param prefix 
  37.      * @throws SAXException 
  38.      */  
  39.     public void endPrefixMapping(String prefix) throws SAXException{  
  40.     }  
  41. /** 
  42.      * 在解析元素开始时调用 
  43.      * @param namespaceURI 
  44.      * @param localName 
  45.      * @param qName 
  46.      * @param atts 
  47.      * @throws SAXException 
  48.      */  
  49.     public void startElement(String namespaceURI, String localName  
  50.         , String qName, Attributes atts) throws SAXException{  
  51.     }  
  52. /** 在解析元素结束时调用 
  53.      * @param namespaceURI 
  54.      * @param localName 本地名,如student 
  55.      * @param qName 原始名,如LIT:student 
  56.      * @throws SAXException   */  
  57.     public void endElement(String namespaceURI, String localName,String qName) throws SAXException{  
  58.   if (localName.equals(“student”)){  
  59.             System.out.println(localName+":"+currentData);  
  60.         }  
  61. }  

取得元素数据的方法——characters

取得元素数据中的空白的方法——ignorableWhitespace
在解析到处理指令时调用的方法——processingInstruction
当未验证解析器忽略实体时调用的方法——skippedEntity
运行时,只需要使用下列代码:

Java代码 复制代码 收藏代码
  1. MySAXParser mySAXParser = new MySAXParser(); 
  2. mySAXParser.parserXMLFile("SutInfo.xml"); 
  1. MySAXParser mySAXParser = new MySAXParser();  
  2. mySAXParser.parserXMLFile("SutInfo.xml");  

3.JDOM

JDOM的处理方式有些类似于DOM,但它主要是用SAX实现的 。JDOM用Java的数据类型来定义操作数据树的各个节点 。JDOM的性能也很优越。

Java代码 复制代码 收藏代码
  1. import org.jdom.*; 
  2. import org.jdom.input.*; 
  3. import org.jdom.output.*; 
  4. SAXBuilder builder = new SAXBuilder(false); 
  5. //得到Document 
  6. Document doc = builder.build(fileURI); 
  7. //名字空间 
  8. Namespace ns = Namespace.getNamespace("LIT" ,"http://www.lit.edu.cn/student/ "); 
  9. //取得所有LIT:student节点的集合 
  10. List lstStudents = elmtStuInfo.getChildren("student",ns); 
  11. for ( … ){ 
  12. Element elmtStudent = (Element)lstStudents.get(i); 
  13. elmtStudent.getChildTextTrim("name", ns); 
  14. } 
  15. //修改 
  16. elmtLesson.getChild("lessonScore" , ns).setText("100"); 
  17. //删除 
  18. elmtStuInfo.removeChild("master", ns); 
  19. //添加 
  20. elmtStuInfo.addContent(new Element("master" , ns).addContent(new Entity("masterName"))); 
  21. //输出文档 
  22. //第一个参数是缩进字符串,这里是4个空格。 
  23. //第二个参数是true,表示需要换行。 
  24. XMLOutputter printDoc = new XMLOutputter(" ",true); 
  25. printDoc.output(doc, new FileOutputStream("StuInfo.xml")); 
  1. import org.jdom.*;  
  2. import org.jdom.input.*;  
  3. import org.jdom.output.*;  
  4. SAXBuilder builder = new SAXBuilder(false);  
  5. //得到Document  
  6. Document doc = builder.build(fileURI);  
  7. //名字空间  
  8. Namespace ns = Namespace.getNamespace("LIT" , "http://www.lit.edu.cn/student/ ");  
  9. //取得所有LIT:student节点的集合  
  10. List lstStudents = elmtStuInfo.getChildren("student",ns);  
  11. for ( … ){  
  12.  Element elmtStudent = (Element)lstStudents.get(i);  
  13.  elmtStudent.getChildTextTrim("name", ns);  
  14. }  
  15. //修改  
  16. elmtLesson.getChild("lessonScore" , ns).setText("100");  
  17. //删除  
  18. elmtStuInfo.removeChild("master", ns);  
  19. //添加  
  20. elmtStuInfo.addContent(new Element("master" , ns).addContent(new Entity("masterName")));  
  21. //输出文档  
  22. //第一个参数是缩进字符串,这里是4个空格。  
  23. //第二个参数是true,表示需要换行。  
  24. XMLOutputter printDoc = new XMLOutputter(" ", true);  
  25.  printDoc.output(doc, new FileOutputStream("StuInfo.xml"));  

4.JAXB (Java And XML Binding)

JAXB 是以SUN为主的一些公司公布的。JAXB将schema(或者DTD)映射为java对象(.java文件),然后使用这些java对象来解析xml文件。需要使用之前生成java文件,因而要有固定的schema,无法处理动态的xml文件。

首先使用xjc命令,生成java文件
xjc  [-options ...]

(生成的文件较多)

Java代码 复制代码 收藏代码
  1. JAXBContext jc = JAXBContext.newInstance(“packageName"); 
  2. Unmarshaller unmarshaller = jc.createUnmarshaller(); 
  3. Collection collection= (Collection)unmarshaller.unmarshal(new File("books.xml")); 
  4. CollectionType.BooksType booksType =collection.getBooks(); 
  5. List bookList = booksType.getBook(); 
  6. for( … ){ 
  7. test.jaxb.BookType book =(test.jaxb.BookType) bookList.get(i); 
  8. System.out.println("Book Name: " + book.getName().trim()); 
  9.    System.out.println("Book ISBN: " +  book.getISBN()); 
  10. } 
  1. JAXBContext jc = JAXBContext.newInstance(“packageName");  
  2.  Unmarshaller unmarshaller = jc.createUnmarshaller();  
  3. Collection collection= (Collection)unmarshaller.unmarshal(new File( "books.xml"));  
  4. CollectionType.BooksType booksType =collection.getBooks();  
  5. List bookList = booksType.getBook();  
  6. for( … ){  
  7.  test.jaxb.BookType book =(test.jaxb.BookType) bookList.get(i);  
  8.  System.out.println("Book Name: " + book.getName().trim());  
  9.    System.out.println("Book ISBN: " +  book.getISBN());  
  10. }  

补充另一种方法:

据悉dom4j在xml解析方面是性能最好的,hibernate等框架都使用它作为解析的工具。

要使用dom4j读写XML文档,需要先下载dom4j包,dom4j官方网站在 http://www.dom4j.org/

目前最新dom4j包下载地址:http://nchc.dl.sourceforge.net/sourceforge/dom4j/dom4j-1.6.1.zip

解开后有两个包,仅操作XML文档的话把dom4j-1.6.1.jar加入工程就可以了,如果需要使用XPath的话还需要加入包jaxen-1.1-beta-7.jar

写了简单的dom4j的使用的demo,以备回忆,有些是dom4j的文挡里例子改编的
使用dom4j解析下面的xml文件。

Xml代码 复制代码 收藏代码
  1. <?xml version="1.0"encoding="GB2312"?>  
  2.  
  3. <?xml-stylesheettype="text/xsl"href="students.xsl"?> 
  4.  
  5. <students> 
  6.     <studentsn="01"> 
  7.         <name>张三</name> 
  8.         <age>18</age> 
  9.     </student> 
  10.      
  11.     <studentsn="02"> 
  12.         <name>李四</name> 
  13.         <age>20</age> 
  14.     </student> 
  15. </students> 
  1. <?xml version="1.0" encoding="GB2312"?>   
  2.   
  3. <?xml-stylesheet type="text/xsl" href="students.xsl"?>  
  4.   
  5. <students>  
  6.     <student sn="01">  
  7.         <name>张三</name>  
  8.         <age>18</age>  
  9.     </student>  
  10.       
  11.     <student sn="02">  
  12.         <name>李四</name>  
  13.         <age>20</age>  
  14.     </student>  
  15. </students>  

Parse.java

Java代码 复制代码 收藏代码
  1. import java.io.File; 
  2.  
  3. import org.dom4j.Attribute; 
  4. import org.dom4j.Document; 
  5. import org.dom4j.DocumentException; 
  6. import org.dom4j.Element; 
  7. import org.dom4j.ProcessingInstruction; 
  8. import org.dom4j.VisitorSupport; 
  9. import org.dom4j.io.SAXReader; 
  10.  
  11. public class Parse { 
  12.  
  13.     public staticvoid main(String[] args) { 
  14.         SAXReader reader = new SAXReader(); 
  15.         File file = new File("src/students.xml"); 
  16.         try { 
  17.             Document doc = reader.read(file); 
  18.             doc.accept(new MyVistor()); 
  19.         } catch (DocumentException e) { 
  20.             // TODO Auto-generated catch block 
  21.             e.printStackTrace(); 
  22.         } 
  23.     } 
  24.  
  25.     public staticclass MyVistor extends VisitorSupport { 
  26.         public void visit(Attribute node) { 
  27.             System.out.println("Attibute:---" + node.getName() +"="+ node.getValue()); 
  28.         } 
  29.  
  30.         public void visit(Element node) { 
  31.             if (node.isTextOnly()) { 
  32.                 System.out.println("Element:---" + node.getName() +"=" 
  33.                         + node.getText()); 
  34.             }else{ 
  35.                 System.out.println("--------" + node.getName() +"-------"); 
  36.             } 
  37.         } 
  38.  
  39.         @Override 
  40.         public void visit(ProcessingInstruction node) { 
  41.             System.out.println("PI:"+node.getTarget()+" "+node.getText()); 
  42.         } 
  43.     } 
  44. } 
  1. import java.io.File;  
  2.   
  3. import org.dom4j.Attribute;  
  4. import org.dom4j.Document;  
  5. import org.dom4j.DocumentException;  
  6. import org.dom4j.Element;  
  7. import org.dom4j.ProcessingInstruction;  
  8. import org.dom4j.VisitorSupport;  
  9. import org.dom4j.io.SAXReader;  
  10.   
  11. public class Parse {  
  12.   
  13.     public static void main(String[] args) {  
  14.         SAXReader reader = new SAXReader();  
  15.         File file = new File("src/students.xml");  
  16.         try {  
  17.             Document doc = reader.read(file);  
  18.             doc.accept(new MyVistor());  
  19.         } catch (DocumentException e) {  
  20.             // TODO Auto-generated catch block  
  21.             e.printStackTrace();  
  22.         }  
  23.     }  
  24.   
  25.     public static class MyVistor extends VisitorSupport {  
  26.         public void visit(Attribute node) {  
  27.             System.out.println("Attibute:---" + node.getName() + "="+ node.getValue());  
  28.         }  
  29.   
  30.         public void visit(Element node) {  
  31.             if (node.isTextOnly()) {  
  32.                 System.out.println("Element:---" + node.getName() + "="  
  33.                         + node.getText());  
  34.             }else{  
  35.                 System.out.println("--------" + node.getName() + "-------");  
  36.             }  
  37.         }  
  38.   
  39.         @Override  
  40.         public void visit(ProcessingInstruction node) {  
  41.             System.out.println("PI:"+node.getTarget()+" "+node.getText());  
  42.         }  
  43.     }  
  44. }  

使用dom4j来将属性写入xml

Java代码 复制代码 收藏代码
  1. import java.io.FileWriter; 
  2. import java.io.IOException; 
  3.  
  4. import org.dom4j.Document; 
  5. import org.dom4j.DocumentHelper; 
  6. import org.dom4j.Element; 
  7. import org.dom4j.io.OutputFormat; 
  8. import org.dom4j.io.XMLWriter; 
  9.  
  10. public class DWriter { 
  11.  
  12.     public staticvoid main(String[] args) { 
  13.         // TODO Auto-generated method stub 
  14.         try { 
  15.             XMLWriter writer = new XMLWriter(new FileWriter("src/author.xml")); 
  16.             Document doc = createDoc(); 
  17.             writer.write(doc); 
  18.             writer.close(); 
  19.  
  20.             // Pretty print the document to System.out 
  21.             // 设置了打印的格式,将读出到控制台的格式进行美化 
  22.             OutputFormat format = OutputFormat.createPrettyPrint(); 
  23.             writer = new XMLWriter(System.out, format); 
  24.             writer.write(doc); 
  25.  
  26.         } catch (IOException e) { 
  27.             // TODO Auto-generated catch block 
  28.             e.printStackTrace(); 
  29.         } 
  30.     } 
  31.  
  32.     public static Document createDoc() { 
  33.         Document doc = DocumentHelper.createDocument(); 
  34.         Element root = doc.addElement("root"); 
  35.         Element author1 = root.addElement("author").addAttribute("name", 
  36.                 "Kree").addAttribute("location","UK") 
  37.                 .addText("Kree Strachan"); 
  38.         Element author2 = root.addElement("author").addAttribute("name","King") 
  39.                 .addAttribute("location","US").addText("King McWrirter"); 
  40.         return doc; 
  41.     } 
  42. } 
  1. import java.io.FileWriter;  
  2. import java.io.IOException;  
  3.   
  4. import org.dom4j.Document;  
  5. import org.dom4j.DocumentHelper;  
  6. import org.dom4j.Element;  
  7. import org.dom4j.io.OutputFormat;  
  8. import org.dom4j.io.XMLWriter;  
  9.   
  10. public class DWriter {  
  11.   
  12.     public static void main(String[] args) {  
  13.         // TODO Auto-generated method stub  
  14.         try {  
  15.             XMLWriter writer = new XMLWriter(new FileWriter("src/author.xml"));  
  16.             Document doc = createDoc();  
  17.             writer.write(doc);  
  18.             writer.close();  
  19.   
  20.             // Pretty print the document to System.out  
  21.             // 设置了打印的格式,将读出到控制台的格式进行美化  
  22.             OutputFormat format = OutputFormat.createPrettyPrint();  
  23.             writer = new XMLWriter(System.out, format);  
  24.             writer.write(doc);  
  25.   
  26.         } catch (IOException e) {  
  27.             // TODO Auto-generated catch block  
  28.             e.printStackTrace();  
  29.         }  
  30.     }  
  31.   
  32.     public static Document createDoc() {  
  33.         Document doc = DocumentHelper.createDocument();  
  34.         Element root = doc.addElement("root");  
  35.         Element author1 = root.addElement("author").addAttribute("name",  
  36.                 "Kree").addAttribute("location", "UK")  
  37.                 .addText("Kree Strachan");  
  38.         Element author2 = root.addElement("author").addAttribute("name", "King")  
  39.                 .addAttribute("location", "US").addText("King McWrirter");  
  40.         return doc;  
  41.     }  
  42. }  

使用dom4j写入到author.xml文件的内容

Java代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <root> 
  3. <author name="Kree" location="UK">Kree Strachan</author> 
  4. <author name="King" location="US">King McWrirter</author> 
  5. </root> 
Java解析、读取XML文件并存入TXT文件的简单例子 Java解析、读取XML文件并存入TXT文件的简单例子 利用Document得到包含文本的对象doc,利用DOM结点实现xml内容的读取,存入TXT文件。 阅读详情

相关推荐

Java解析XML文件解决方案

特点:将整个XML文档加载到内存中形成树状结构,适合小型XML文件。特点:基于事件驱动的流式解析,内存效率高,适合大型XML文件。// 处理开始元素...// 处理文本内容...// 处理结束元素...特点:通过注解将Java对象与XML相互转换。小型XML文件:DOM、JAXB或DOM4J。特点:拉式解析,结合了DOM和SAX的优点。// 处理数据...大型XML文件:SAX或StAX。// 解析XML到Java对象。// 读取XML文件。// 使用SAX解析。// 定义Java类。

2501_91207543的博客 1278

详解Java解析XML的四种方法

Java解析XML的四种方法:1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML

qq_50896685的博客 1万+

Java解析XML文件的方式

SAX是Simple API for XML的缩写,不同于DOM的文档驱动,它是事件驱动的,也就是说,它是一种基于回调(callback)函数的解析方式,比如开始解析xml文档时,会调用我们自己定义的startDocument函数,从下表里,我们能看到基于SAX方式里的各种回调函数以及它们被调用的时间点。在第13行,通过了parse方法启动了解析。在上文里我们就已经知道,在SAX的方式里,是通过调用各种回调函数来完成解析的,所以在代码里,我们还得自定义各个回调函数,代码如下。

2401_89312470的博客 1064

Java中解析XML文件

0617

weixin_52071901的博客 5186

java xml解析工具类 java xml解析工具类

java xml解析工具类 java xml解析工具类 java xml解析工具类 java xml解析工具类 java xml解析工具类 java xml解析工具类 java xml解析工具类 java xml解析工具类 java xml解析工具类 java xml解析工具类 java xml解析工具类 java xml解析工具类 java xml解析工具类 java xml解析工具类 java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类

java读取和写入xml文件

该资源包含了java四种方式读取和写入xml文件的代码

Java - XML文件解析

使用java编写以DOM方式解析某目录下的特定XML文件,有源码

weixin_44462773的博客 2005

初识Renode

1. 简介 Renode是Antmicro公司发布的一个开发框架,使得开发人员通过模拟物理硬件系统(包括CPU、外围设备、传感器、环境以及节点之间的有线或无线介质),加速物联网和嵌入式系统的开发。它可在PC上通过软件对嵌入式设备进行模拟,可模拟Cortex-M、Cortex-A、RISC-V和其他CPU,并可模拟外设以及各种通信总线和接口。其指令模拟器使用C语言开发,外设模拟器使用C#语言开发,测试及输出层面的内容则用python编写。 Renode官网:Renodehttps://renode.io/

牧羊女 5291

Java中如何解析XML文件

Java中如何解析XML文件 xml文件:"student.xml" xml 代码 <?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPEzmclassSYSTEM"student.dtd"> <zmclassid="0703"> <student...

weixin_33871366的博客 165

储能电站 BMS 与车载动力电池 BMS 核心差异:工况、保护策略、控制逻辑对比

储能电站BMS与车载动力电池BMS虽同名,实为针对不同赛道量身定制的产品。简单地将车载BMS方案套用于储能,或将储能BMS思路用于车载,都可能带来性能、安全或成本上的严重问题。在选择和设计BMS时,必须回归其应用场景的本质需求储能BMS是**“资产管理者”**,精打细算,追求在长达十余年的服役期内稳定、高效地创造收益。车载BMS是**“性能与安全卫士”**,反应敏捷,确保在车辆全生命周期内动力澎湃且万无一失。

小帽子的博客 422

5步搞定ABB机器人RobotStudio与S7-1500PLC的Profinet通讯(附PLCSIM调试技巧)

本文详细介绍了如何利用RobotStudio与TIA Portal软件,结合PLCSIM Advanced仿真器,在零硬件条件下实现ABB机器人与西门子S7-1500 PLC之间的Profinet通讯虚拟调试。通过五个核心步骤,从环境搭建、网络配置、信号映射到联合仿真与高级调试,帮助工程师在项目前期高效验证逻辑、压缩现场调试周期,并掌握实用的PLCSIM调试技巧。

weixin_29188043的博客 505

java如何解析xml文件_java如何解析/读取xml文件

本文实例为大家分享了java解析/读取xml文件的方法,供大家参考,具体内容如下XML文件JohnB12MaryA11SimonA18Java 代码:package net.viralpatel.java.xmlparser;import java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.D...

weixin_30742297的博客 185

FEniCS学习笔记01:centos7下通过conda安装FEniCSx0.7

2023年版本的Fenicsx0.7,官网推荐使用conda命令安装集成好的Python包,因此我们的安装思路是先安装Anaconda,再按照官网步骤安装Fenics。

huahua_xiao的博客 5056

Java xml文件解析 sax 解析笔记

一般为以下步骤: 1、得到xml文件对应的资源,可以是xml的输入流,文件和uri 2、得到SAX解析工厂(SAXParserFactory) 3、由解析工厂生产一个SAX解析器(SAXParser) 4、传入输入流和handler给解析器,调用parse()解析 //1.创建解析工厂 SAXParserFactoryfactory=SAXParserF...

Matthew的博客 395

YOLOv5轻量化实战:从Ghost模块到工业级部署的完整指南

本文详细介绍了YOLOv5轻量化实战,重点解析了Ghost模块在工业检测中的应用及其优化策略。通过Ghost卷积技术,模型参数量和GFLOPs显著降低,同时保持高精度,适用于实时性要求严格的工业场景。文章还提供了从模型优化到TensorRT加速的完整部署指南,助力开发者实现高效工业级应用。

weixin_28223453的博客 487

文献阅读笔记:量子微波测量技术综述

量子微波测量技术研究进展:量子微波测量技术利用里德堡原子与微波电场的相干相互作用,突破了传统测量方法的物理限制。该技术基于电磁诱导透明效应和里德堡原子能级跃迁原理,通过激光激发原子并监测光谱变化来测量微波电场强度。相比传统方法,量子微波测量具有超高灵敏度(理论极限可达nV/cm)、宽动态范围(超过100dB)、小型化等显著优势,且测量结果可直接溯源至普朗克常数。典型实验系统包括光源、原子气室和探测器,采用光谱法、干涉法等多种测量方法。近年来,该技术在基础研究和应用方面取得重要进展,展现出在通信、雷达、计量等

Grow into a more wonderful you 987

xml 文件解析 java_Java 解析/读取XML 文件

Java 解析/读取XML 文件1.[代码]students.xmlJohnB12MaryA11SimonA182.[代码]XMLParser.javapackage net.viralpatel.java.xmlparser;import java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers....

weixin_34404599的博客 94

6D位姿估计系列(一)

本研究提出FoundationPose,一个统一的基础模型框架,支持基于CAD模型和无模型的6D物体姿态估计与跟踪。通过神经隐式表示实现高效新视图合成,结合大规模合成数据训练和对比学习策略,模型展现出强大的泛化能力。实验表明,该方法在LINEMOD、YCB-Video等多个基准数据集上显著优于现有专门化方法,处理速度达32Hz,且无需目标域微调。该工作为多场景物体姿态估计提供了通用解决方案。

qq625924821的博客 557

JAVA 解析XML文件

什么是XML文件? XML,可扩展的标识语言(eXtensibleMarkupLanguage) XML是一种类似于HTML的标记语言,XML是用来描述数据的,XML的标记不是在XML中预定义的,你必须定义自己的标记,XML使用文档类型定义(DTD)或者模式(Schema)来描述数据,XML使用DTD或者Schema后就是自描述的语言,XML(eXtensibleMarkupLanguage)

ricky73999的博客 941

cesium 淹没分析

cesium淹没分析

God's asylum的博客 480

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

使用 Java 解析 XML 文件

在你使用 Java 编写软件时实现持久化配置。 当你编写一个应用时,你通常都会希望用户能够定制化他们和应用交互的方式,以及应用与系统进行交互的方式。这种方式通常被称为 “偏好preference” 或者 “设置setting”,它们被保存在一个 “偏好文件” 或者 “配置文件” 中,有时也直接简称为 “配置config”。配置文件可以有很多种格式,包括 INI、JSON、YAML 和 XML。每一种编程语言解析这些格式的方式都不同。本文主要讨论,当你在使用 Java 编程语言 来编写软件时,实现持久化..

m0_49496327的博客 643

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: Spring事务配置的五种方式
下一篇: 高效程序员的 7 个共同特征
7star_java
博客等级 码龄15年 80粉丝 127原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值