stax解析XML的一个例子

1首先是XMl文档

Java代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <cve xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.      xmlns="http://cve.mitre.org/cve/downloads"  
  4.      xsi:noNamespaceSchemaLocation="http://cve.mitre.org/schema/cve/cve_1.0.xsd">  
  5. <item type="CVE" name="CVE-1999-0002" seq="1999-0002">  
  6. <status>Entry</status>  
  7. <desc>Buffer overflow in NFS mountd gives root access to remote attackers, mostly in Linux systems.</desc>  
  8. <refs>  
  9. <ref source="SGI" url="ftp://patches.sgi.com/support/free/security/advisories/19981006-01-I">19981006-01-I</ref>  
  10. <ref source="CERT">CA-98.12.mountd</ref>  
  11. <ref source="CIAC" url="http://www.ciac.org/ciac/bulletins/j-006.shtml">J-006</ref>  
  12. <ref source="BID" url="http://www.securityfocus.com/bid/121">121</ref>  
  13. <ref source="XF">linux-mountd-bo</ref>  
  14. </refs>  
  15. </item>  
  16.   
  17. </cve>  

 2具体的解析类:

Java代码   收藏代码
  1. package com.test;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileReader;  
  5. import java.io.IOException;  
  6. import java.io.Reader;  
  7. import java.util.ArrayList;  
  8. import java.util.List;  
  9.   
  10. import javax.xml.stream.XMLInputFactory;  
  11. import javax.xml.stream.XMLStreamConstants;  
  12. import javax.xml.stream.XMLStreamException;  
  13. import javax.xml.stream.XMLStreamReader;  
  14.   
  15. import com.bean.Item;  
  16. import com.bean.Ref;  
  17.   
  18. public class StaxTest {  
  19.     //基于事件流的方式来做的,通过使用流的API,像指针一样的来处理文档,每一个节点都可以返回一个事件。处理完以后由JVM来回收内存。  
  20.     public static void main(String[] args) throws IOException,  
  21.             XMLStreamException {  
  22.   
  23.         StaxTest test = new StaxTest();  
  24.         File file = new File("src/test.xml");  
  25.         test.read(file);  
  26.     }  
  27.   
  28.     public void read(File file) throws IOException, XMLStreamException {  
  29.         Long time = null;  
  30.         XMLInputFactory factory = XMLInputFactory.newInstance();  
  31.         Reader fileReader = new FileReader(file);  
  32.         factory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE);  
  33.         XMLStreamReader reader = factory.createXMLStreamReader(fileReader);  
  34.         try {  
  35.             int event = reader.getEventType();//获取节点类型,结果是以整形的方式返回的。  
  36.   
  37.             //这里的3个对象是具体的POJO  
  38.             Item item = null;  
  39.             Ref ref = null;  
  40.             List<Ref> refList = null;//用来存放POJO的集合  
  41.   
  42.             while (true) {  
  43.                 switch (event) {  
  44.                 case XMLStreamConstants.START_DOCUMENT://表示的是文档的开通节点。  
  45.                     time = System.currentTimeMillis();  
  46.                     break;  
  47.                 case XMLStreamConstants.START_ELEMENT://开始解析开始节点  
  48.                     if (reader.getLocalName().equals("item")) {//判断节点的名字  
  49.                         item = new Item();//实例化一个节点POJO类  
  50.                         refList = new ArrayList<Ref>();  
  51.   
  52.                         //给节点赋值  
  53.                         item.setType(reader.getAttributeValue(0));//getAttributeValue(index)获取属性的值,可能有多个属性。  
  54.                         item.setName(reader.getAttributeValue(1));  
  55.                         item.setSeq(reader.getAttributeValue(2));  
  56.   
  57.                     }  
  58.   
  59.                     if (reader.getLocalName().equals("status")) {  
  60.   
  61.                         item.setStatus(reader.getElementText());  
  62.   
  63.                     }  
  64.   
  65.                     if (reader.getLocalName().equals("desc")) {  
  66.                         item.setDesc(reader.getElementText());  
  67.   
  68.                     }  
  69.   
  70.                     if (reader.getLocalName().equals("ref")) {  
  71.   
  72.                         ref = new Ref();  
  73.                         ref.setSource(reader.getAttributeValue(0));  
  74.                         if (reader.getAttributeCount() > 2) {  
  75.                             ref.setUrl(reader.getAttributeValue(1));  
  76.                         }  
  77.                         ref.setText(reader.getElementText());  
  78.                         System.out.println("-----------refs--ref-------------");  
  79.   
  80.                         if (reader.getAttributeCount() > 2) {  
  81.                             System.out.println("url: "  
  82.                                     + reader.getAttributeValue(1));  
  83.                         }  
  84.   
  85.                     }  
  86.                     break;  
  87.   
  88.                 case XMLStreamConstants.CHARACTERS:  
  89.                     // if(reader.isWhiteSpace())  
  90.                     // break;  
  91.                     break;  
  92.                     //文档的结束元素  
  93.                 case XMLStreamConstants.END_ELEMENT:  
  94.                     if (reader.getLocalName().equals("item")) {  
  95.                         item.setRefList(refList);  
  96.                     }  
  97.   
  98.                     break;  
  99.                     //文档的结束。  
  100.                 case XMLStreamConstants.END_DOCUMENT:  
  101.                     System.out.println("-----------end Document--------");  
  102.                     time = System.currentTimeMillis() - time;  
  103.                     System.out.println("耗时: " + time + "毫秒");  
  104.                     break;  
  105.                 }  
  106.   
  107.                 if (!reader.hasNext()) {  
  108.                     break;  
  109.                 }  
  110.                 event = reader.next();  
  111.             }  
  112.         } finally {  
  113.             reader.close();  
  114.         }  
  115.     }  
  116.   
  117. }  

 3使用的其它类POJO

Java代码   收藏代码
  1. public class Item implements Serializable {  
  2.   
  3.     /** 
  4.      *  
  5.      */  
  6.     private static final long serialVersionUID = 1L;  
  7.     private String type;  
  8.     private String name;  
  9.     private String seq;  
  10.     private String status;  
  11.     private String desc;  
  12.     private List<Ref> refList = new ArrayList<Ref>();  
  13.   
  14.     public String getType() {  
  15.         return type;  
  16.     }  
  17.   
  18.     public void setType(String type) {  
  19.         this.type = type;  
  20.     }  
  21.         ..................................  
 
Java代码   收藏代码
  1. private static final long serialVersionUID = 1L;  
  2.     private String source;  
  3.     private String url;  
  4.     private String text;  
  5.   
  6.     public String getSource() {  
  7.         return source;  
  8.     }  
  9.   
  10.     public void setSource(String source) {  
  11.         this.source = source;  
  12.     }  
  13.    ............................  

 4 使用的jar 包 stax-1.2.0.jar

                      stax-api-1.0.1.jar

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值