java xml学习总结

xml学习

 一. 概述

      xml的四种解析方式:

            1.  以DOM方式解析。优点是可以对文档的内容和结构进行修改,但不适合大文件的读取。

            2.  以SAX方式解析。SAX模型最大的优点是内存消耗小,因为整个文档无需一次加载到内存中,这使SAX解析器可以解析大于系统内存的文档。缺点是不能修改文档。

               3.   通过JDOM组件。可以认为JDOM=DOM+SAX,折合了两种的优点。

               4.    通过DOM4j组件。跟JDOM类似,某些时候由于JDOM,常见于一些开源框架中。

 

二. DOM

使用案例:

       1.读取文档

                     

[java]  view plain  copy
  1. <span style="font-size: small;" mce_style="font-size: small;">package com.ljp.xml;  
  2. import java.io.File;  
  3. import java.io.IOException;  
  4. import javax.xml.parsers.DocumentBuilder;  
  5. import javax.xml.parsers.DocumentBuilderFactory;  
  6. import javax.xml.parsers.ParserConfigurationException;  
  7. import org.w3c.dom.Document;  
  8. import org.w3c.dom.Element;  
  9. import org.w3c.dom.NodeList;  
  10. import org.xml.sax.SAXException;  
  11.   
  12. public class DOMDemo{  
  13.     public static void main(String[] args) {  
  14.         //取得DocmentBuilderFactory对象  
  15.         DocumentBuilderFactory  factory=DocumentBuilderFactory.newInstance();  
  16.         //取得DocumentBuilder对象  
  17.         DocumentBuilder builder=null;  
  18.         try {  
  19.             builder=factory.newDocumentBuilder();  
  20.         } catch (ParserConfigurationException e) {  
  21.             // TODO Auto-generated catch block  
  22.             e.printStackTrace();  
  23.         }  
  24.         //取得Document对象  
  25.         Document  doc=null;  
  26.         try {  
  27.             doc=builder.parse(new File("DOMDemo.xml"));  
  28.         } catch (SAXException e) {  
  29.             // TODO Auto-generated catch block  
  30.             e.printStackTrace();  
  31.         } catch (IOException e) {  
  32.             // TODO Auto-generated catch block  
  33.             e.printStackTrace();  
  34.         }  
  35.           
  36.           
  37.         NodeList nl=doc.getElementsByTagName("man");  
  38.         for(int i=0;i<nl.getLength();i++){  
  39.             Element e=(Element) nl.item(i);  
  40.             System.out.println(e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());  
  41.             System.out.println(e.getElementsByTagName("age").item(0).getFirstChild().getNodeValue());  
  42.         }  
  43.     }  
  44. }  
  45. </span>  
 

      2.写入xml文档

                    

[java]  view plain  copy
  1. <span style="font-size: small;" mce_style="font-size: small;">package com.ljp.xml;  
  2. import java.io.File;  
  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. public class GenerateXMLDemo {  
  16.   
  17.     public static void main(String[] args) {  
  18.         // TODO Auto-generated method stub  
  19.         DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();  
  20.         DocumentBuilder builder=null;  
  21.         try {  
  22.             builder=factory.newDocumentBuilder();  
  23.         } catch (ParserConfigurationException e) {  
  24.             // TODO Auto-generated catch block  
  25.             e.printStackTrace();  
  26.         }  
  27.         Document doc=null;  
  28.         doc=builder.newDocument();  
  29.           
  30.         //建立各个操作节点  
  31.         Element mans=doc.createElement("mans");  
  32.         Element man=doc.createElement("man");  
  33.         Element name=doc.createElement("name");  
  34.         Element age=doc.createElement("age");  
  35.         //为节点添加内容  
  36.         name.appendChild(doc.createTextNode("罗军平"));  
  37.         age.appendChild(doc.createTextNode("22"));  
  38.         //设置节点关系  
  39.         man.appendChild(name);  
  40.         man.appendChild(age);  
  41.         mans.appendChild(man);  
  42.         doc.appendChild(mans);  
  43.         //输出到文档文件中中  
  44.         TransformerFactory tfactory=TransformerFactory.newInstance();  
  45.         Transformer tf=null;  
  46.         try {  
  47.             tf=tfactory.newTransformer();  
  48.         } catch (TransformerConfigurationException e) {  
  49.             // TODO Auto-generated catch block  
  50.             e.printStackTrace();  
  51.         }  
  52.       
  53.         //tf.setOutputProperty(OutputKeys.ENCODING,"GBK");//设置编码  
  54.         DOMSource source=new DOMSource(doc);  
  55.           
  56.         StreamResult result=new StreamResult(new File("GenerateXMLDemo.xml"));  
  57.           
  58.         try {  
  59.             tf.transform(source, result);  
  60.         } catch (TransformerException e) {  
  61.             // TODO Auto-generated catch block  
  62.             e.printStackTrace();  
  63.         }  
  64.     }  
  65.   
  66. }  
  67. </span>  
 

 三. SAX

       SAX的一个特点是用户可以自定义的输出内容的格式,此功能的实现要求用户用户设计一个类,此类需继承DefaultHandler,并复写相关方法,如下面的MySAX类

使用案例:

 

          1.读取xml文档:    

                 MySAX.java

                

[c-sharp]  view plain  copy
  1. <span style="font-size: small;" mce_style="font-size: small;">package com.ljp.xml;  
  2. import org.xml.sax.Attributes;  
  3. import org.xml.sax.SAXException;  
  4. import org.xml.sax.helpers.DefaultHandler;  
  5.   
  6. public class MySAX extends DefaultHandler {  
  7.     public void startDocument() throws SAXException{  
  8.         System.out.print("<?xml version=/"1.0/" encoding=/"GBK/"?>");  
  9.     }  
  10.       
  11.     public void startElement(String uri,String localName,  
  12.             String qName,Attributes arributes)throws SAXException{  
  13.         System.out.print("<");  
  14.             System.out.print(qName);  
  15.         System.out.print(">");  
  16.     }  
  17.       
  18.     public void characters(char[] ch,int start,int length) throws SAXException{  
  19.         System.out.print(new String(ch,start,length));  
  20.     }  
  21.       
  22.     public void endElement(String uri,String localName,  
  23.                         String qName)throws SAXException{  
  24.         System.out.print("<");  
  25.             System.out.print(qName);  
  26.         System.out.print(">");  
  27.     }  
  28.       
  29.     public void endDocument() throws SAXException{  
  30.         System.out.print("文档结束。。。。");  
  31.     }  
  32. }  
  33. </span>  
 

                SAXDemo.java

               

[java]  view plain  copy
  1. <span style="font-size: small;" mce_style="font-size: small;">package com.ljp.xml;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5. import javax.xml.parsers.ParserConfigurationException;  
  6. import javax.xml.parsers.SAXParser;  
  7. import javax.xml.parsers.SAXParserFactory;  
  8. import org.xml.sax.SAXException;  
  9.   
  10. public class SAXDemo {  
  11.     public  static void main(String args[]){  
  12.         SAXParserFactory factory=SAXParserFactory.newInstance();  
  13.         SAXParser parser=null;  
  14.         try {  
  15.             parser = factory.newSAXParser();  
  16.         } catch (ParserConfigurationException e) {  
  17.             // TODO Auto-generated catch block  
  18.             e.printStackTrace();  
  19.         } catch (SAXException e) {  
  20.             // TODO Auto-generated catch block  
  21.             e.printStackTrace();  
  22.         }  
  23.           
  24.         try {  
  25.             parser.parse(new File("SAXDemo.xml"),new MySAX());  
  26.         } catch (SAXException e) {  
  27.             // TODO Auto-generated catch block  
  28.             e.printStackTrace();  
  29.         } catch (IOException e) {  
  30.             // TODO Auto-generated catch block  
  31.             e.printStackTrace();  
  32.         }  
  33.     }  
  34. }  
  35. </span>  
   

四. JDOM

使用案例:

       1.读取xml文档 

            JDOMParseDemo.java 

           

[java]  view plain  copy
  1. <span style="font-size: small;" mce_style="font-size: small;">package com.ljp.xml;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5. import java.util.Iterator;  
  6. import java.util.List;  
  7. import org.jdom.Document;  
  8. import org.jdom.Element;  
  9. import org.jdom.JDOMException;  
  10. import org.jdom.input.SAXBuilder;  
  11.   
  12. public class JDOMParseDemo {  
  13.   
  14.     public static void main(String[] args) {  
  15.         SAXBuilder builder=new SAXBuilder();  
  16.         Document doc=null;  
  17.         try {  
  18.             doc=builder.build(new File("JDOMWriteDemo.xml"));  
  19.         } catch (JDOMException e) {  
  20.             e.printStackTrace();  
  21.         } catch (IOException e) {  
  22.             // TODO Auto-generated catch block  
  23.             e.printStackTrace();  
  24.         }  
  25.           
  26.         //得到跟节点  
  27.         Element root=doc.getRootElement();  
  28.           
  29.         List list=root.getChildren();  
  30.         Iterator iter=list.iterator();  
  31.         while(iter.hasNext()){  
  32.             Element e=(Element) iter.next();  
  33.               
  34.             String name=e.getChildText("name");  
  35.             String id=e.getChild("name").getAttributeValue("id");  
  36.             String age=e.getChildText("age");  
  37.               
  38.             System.out.print(name+" "+id+" "+age);  
  39.         }  
  40.     }  
  41.   
  42. }  
  43. </span>  
   

        2.创建xml文档

          JDOMWriteDemo .java 

              

[java]  view plain  copy
  1. <span style="font-size: small;" mce_style="font-size: small;">package com.ljp.xml;  
  2. import java.io.File;  
  3. import java.io.FileNotFoundException;  
  4. import java.io.FileOutputStream;  
  5. import java.io.IOException;  
  6.   
  7. import org.jdom.Attribute;  
  8. import org.jdom.Document;  
  9. import org.jdom.Element;  
  10. import org.jdom.output.XMLOutputter;  
  11.   
  12. public class JDOMWriteDemo {  
  13.     public static void main(String[] args) {  
  14.         // TODO Auto-generated method stub  
  15.         Document doc=new Document();  
  16.         Element mans=new Element("mans");  
  17.         Element man=new Element("man");  
  18.         Element name=new Element("name");  
  19.         Element age=new Element("age");  
  20.         Attribute id=new Attribute("id","罗军平");  
  21.           
  22.         //增加内容   
  23.         name.setText("罗军平");  
  24.         age.setText("22");  
  25.         name.setAttribute(id);  
  26.           
  27.         //设置联系  
  28.         doc.addContent(mans);  
  29.         mans.addContent(man);  
  30.         man.addContent(name);  
  31.         man.addContent(age);  
  32.           
  33.         //输出到文件  
  34.         XMLOutputter out=new XMLOutputter();  
  35.           
  36.         try {  
  37.             out.setFormat(out.getFormat().setEncoding("GBK")); //设置编码  
  38.             out.output(doc,new FileOutputStream(new File("JDOMWriteDemo.xml")));  
  39.         } catch (FileNotFoundException e) {  
  40.             // TODO Auto-generated catch block  
  41.             e.printStackTrace();  
  42.         } catch (IOException e) {  
  43.             // TODO Auto-generated catch block  
  44.             e.printStackTrace();  
  45.         }  
  46.     }  
  47.   
  48. }  
  49. </span>  
 

 五. DOM4j

使用案例:

         1.读取xml文档 

                   DOM4jReaderDemo.java

                  

[java]  view plain  copy
  1. <span style="font-size: small;" mce_style="font-size: small;">package com.ljp.xml;  
  2.   
  3. import java.io.File;  
  4. import java.util.Iterator;  
  5.   
  6. import org.dom4j.Document;  
  7. import org.dom4j.DocumentException;  
  8. import org.dom4j.Element;  
  9. import org.dom4j.io.SAXReader;  
  10.   
  11. public class DOM4jReaderDemo {  
  12.   
  13.     /** 
  14.      * @param args 
  15.      */  
  16.     public static void main(String[] args) {  
  17.         SAXReader reader=new SAXReader();  
  18.           
  19.         Document doc=null;  
  20.         try {  
  21.             doc=reader.read(new File("DOM4jWriteDemo.xml"));  
  22.         } catch (DocumentException e) {  
  23.             // TODO Auto-generated catch block  
  24.             e.printStackTrace();  
  25.         }  
  26.           
  27.         Element root=doc.getRootElement();  
  28.         Iterator iter=root.elementIterator("man");  
  29.         while(iter.hasNext()){  
  30.             Element man=(Element) iter.next();  
  31.             System.out.println(man.elementText("name"));  
  32.             System.out.println(man.elementText("age"));  
  33.         }  
  34.           
  35.     }  
  36.   
  37. }  
  38. </span>  
  

          2.创建xml文档  

                    DOM4jWriteDemo.java

                   

[java]  view plain  copy
  1. <span style="font-size: small;" mce_style="font-size: small;">package com.ljp.xml;  
  2. import java.io.File;  
  3. import java.io.FileNotFoundException;  
  4. import java.io.FileOutputStream;  
  5. import java.io.IOException;  
  6. import java.io.UnsupportedEncodingException;  
  7. import org.dom4j.Document;  
  8. import org.dom4j.DocumentHelper;  
  9. import org.dom4j.Element;  
  10. import org.dom4j.io.OutputFormat;  
  11. import org.dom4j.io.XMLWriter;  
  12.   
  13. public class DOM4jWriteDemo {  
  14.   
  15.     @SuppressWarnings("deprecation")  
  16.     public static void main(String[] args) {  
  17.         Document doc=DocumentHelper.createDocument();  
  18.         //定义一个根节点  
  19.         Element root=doc.addElement("mans");  
  20.         Element man=root.addElement("man");  
  21.         Element name=man.addElement("name");  
  22.         Element age=man.addElement("age");  
  23.           
  24.         name.setText("Tom");  
  25.         //name.setAttributeValue("id", "luo");  //已过时  
  26.         name.addAttribute("id""20091205");  
  27.         age.setText("22");  
  28.           
  29.         OutputFormat format=OutputFormat.createPrettyPrint();  
  30.         format.setEncoding("GBK");  
  31.           
  32.         XMLWriter writer=null;  
  33.         try {  
  34.             writer=new XMLWriter(new FileOutputStream(new File("DOM4jWriteDemo.xml")),format);  
  35.         } catch (UnsupportedEncodingException e) {  
  36.             // TODO Auto-generated catch block  
  37.             e.printStackTrace();  
  38.         } catch (FileNotFoundException e) {  
  39.             // TODO Auto-generated catch block  
  40.             e.printStackTrace();  
  41.         }  
  42.           
  43.         try {  
  44.             writer.write(doc);  
  45.             writer.close();  
  46.         } catch (IOException e) {  
  47.             // TODO Auto-generated catch block  
  48.             e.printStackTrace();  
  49.         }  
  50.           
  51.     }  
  52.   
  53. }  
  54. </span>  

发布了4 篇原创文章 · 获赞 1 · 访问量 423

猜你喜欢

转载自blog.csdn.net/rwjxiaoyue/article/details/51058224