Stax解析XML的簡單實例
來源:程序員人生 發布時間:2015-05-29 08:34:20 閱讀次數:2983次
關鍵字解釋:
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對象來寫入1個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文檔的第1行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();}}
}
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈