Stax解析XML的简单实例

关键字解释:

Stax:Streaming API for XML(用于读写XML的流接口)


xml文件代码

<?xml version="1.0"?>  
<service>  
    <item>  
        <task>test</task>  
        <strategy>repeat</strategy>  
    </item>  
    <item>  
        <task>WebpageRespTask</task>  
        <strategy>single</strategy>  
    </item>  
</service>  


Java代码:Junit4 testcase:TestStax

package unit_test;

import java.io.InputStream;

import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.events.XMLEvent;

import org.junit.Test;

public class TestStax {
	//基于光标的解析方式
	@Test
	public void cursorBased() {
		 XMLInputFactory factory = XMLInputFactory.newInstance();
         InputStream is = null;
         is = TestStax.class.getClassLoader().getResourceAsstream("service.xml");
         XMLStreamReader  reader = null;
         try {
        	 reader = factory.createXMLStreamReader(is);
		
			while (reader.hasNext())
			 { 
				int type = reader.next();
//				 System.out.println(reader.next());
//				 if (type==XMLStreamConstants.START_DOCUMENT||type==XMLStreamConstants.END_DOCUMENT) {
//					 System.out.println(reader..toString());
//				}
                 if(type==
						XMLStreamConstants.START_ELEMENT||type==XMLStreamConstants.END_ELEMENT){
					System.out.println(reader.getName().toString());
				}
				 
				 else if(type==XMLStreamConstants.CHaraCTERS) {
				    System.out.println(reader.getText().toString().trim());
				}
			 }
		} 
         catch (XMLStreamException e) {
			e.printstacktrace();
		}      
      }

	//基于迭代的解析方式
	@Test
	public void iteratorBased()
	{
		 XMLInputFactory factory = XMLInputFactory.newInstance();
         InputStream is = null;
         is = TestStax.class.getClassLoader().getResourceAsstream("service.xml");
         XMLEventReader  reader = null;
         try {
        	 reader = factory.createXMLEventReader(is);
		
			while (reader.hasNext())
			 { 
				 XMLEvent event = reader.nextEvent();
		    		if (event.isstartElement()) {
					String name = event.asstartElement().getName().toString();
					if (name.equals("strategy")) {
						System.out.println(reader.getElementText());
					}
					
				}
			 }
		} 
         catch (XMLStreamException e) {
			e.printstacktrace();
		}      
	}
       //基于Xpath的形式,解析之前必须先加载整个Dom...DOM--->Document Object Model
        @Test
       public void testXpath()
        {
          try {
            System.out.println("-------------------------------textxpath----------------------------------------");
               InputStream is = TestStax.class.getClassLoader().getSystemResourceAsstream("service.xml");
             
                 DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
                    Document dom = db.parse(is);

                    XPath xpath = XPathFactory.newInstance().newXPath();
                    String xpStr = "//item[@id='task1']";
                    NodeList list = (NodeList) xpath.evaluate(xpStr,dom,XPathConstants.NODESET);
                    System.out.println(list.getLength());
                    for (int index=0;index<list.getLength();index++) {
                              Element ele = (Element) list.item(index);
                          //System.out.println(ele.getNodeName()+" :"+ele.getNodeValue());
                             System.out.println(ele.getElementsByTagName("task").item(0).getTextContent());
               }
               System.out.println("-----------------------------------------------------------------------");
     }
    catch (SAXException e) {
                         e.printstacktrace();
                                } catch (IOException e) {
                            // Todo Auto-generated catch block
                                  e.printstacktrace();
                                  }
                             catch (ParserConfigurationException e) {
                                e.printstacktrace();
                           } catch (XPathExpressionException e) {
                      // Todo Auto-generated catch block
                                 e.printstacktrace();
                           }
     }<pre name="code" class="java">        <pre name="code" class="java">
//通过XMLStreamWriter对象来写入一个xml文档
@Testpublic void writeXml(){try {OutputStream os = new FileOutputStream("person.xml");XMLStreamWriter xmlSW = XMLOutputFactory.newInstance().createXMLStreamWriter(os);//XMLStreamWriter xmlSW = XMLOutputFactory.newInstance().createXMLStreamWriter(System.out); //写入xml文档的第一行xmlSW.writeStartDocument("GBK","1.0"); xmlSW.writeEndDocument(); //写入xml节点 xmlSW.writeStartElement("person"); xmlSW.writeStartElement("perName"); xmlSW.writeCharacters("wuwh"); xmlSW.writeEndElement(); xmlSW.writeEndElement(); //在此方法之前,输出内容都保存在cache中, //执行此方法会把存在缓存中数据实际输出。 xmlSW.flush(); xmlSW.close(); } catch (XMLStreamException e) {e.printstacktrace();} catch (FactoryConfigurationError e) {// Todo Auto-generated catch blocke.printstacktrace();} catch (FileNotFoundException e) {// Todo Auto-generated catch blocke.printstacktrace();}}
 

    }

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念