XML解析包括在线分析

问题描述:

使用:XML解析包括在线分析

import org.w3c.dom.*; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.DocumentBuilder; 

我怎么能提取XML数据?例如对于此xml文件:

<request method="POST" url="/devices/test/planner" body="*"> 
    <response statusCode="200"> 
    <header> 
     <headerParameters> 
     <headerParameter name="Content-Type">Content-Type=application/xml</headerParameter> 
     </headerParameters> 
    </header> 
    <body>booking created!</body> 
    </response> 
</request> 

我该如何提取数据? 另外我怎样才能从内联行提取数据?

<request method="POST" url="/devices/test/planner" body="*"> 

谢谢?

+3

你有没有尝试什么吗? – home 2012-01-08 20:02:26

+0

你到目前为止尝试过什么?你刚刚说过你打算使用哪些课程。而“内联行中的数据”是什么意思? – dty 2012-01-08 20:02:59

+0

我试着用tutoriels上的一些libreries,但只设法得到部分解析。在每一个导师他们使用不同的库,我不能得到涵盖我所需要的一个(或者propably我不能找出我可以使用的api工具) – 2012-01-08 20:07:42

我第二次推荐使用XPath。你可以手动遍历DOM,但为什么? XPath旨在解决此问题。下面是一个完整的Java/JAXP/XPath的例子(SANS错误检查和异常处理):

import java.io.IOException; 
import java.io.StringReader; 
import javax.xml.parsers.*; 
import javax.xml.xpath.*; 
import org.w3c.dom.Document; 
import org.w3c.dom.Node; 
import org.xml.sax.InputSource; 
import org.xml.sax.SAXException; 

public class Xpather { 
    public static void main(String[] args) 
      throws XPathExpressionException, ParserConfigurationException, 
      SAXException, IOException { 
     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder db = dbf.newDocumentBuilder(); 
     Document doc = db.parse(new InputSource("workbook.xml")); 
     XPath xpath = XPathFactory.newInstance().newXPath(); 
     Node body = (Node) xpath.evaluate("/request/response/body", doc, 
       XPathConstants.NODE); 
     System.out.println(body.getTextContent()); 
     Node url = (Node) xpath.evaluate("/request/@url", doc, 
       XPathConstants.NODE); 
     System.out.println(url.getNodeValue()); 
    } 
} 

此代码打印body元素和request元素的url属性值的内容。

输出:

预订创建!

/设备/测试/规划

使用XPath - 也容易通过standard Java APIs获得。一旦你有了Document,Java的XPath就可以直接评估它 - 所以你的DocumentBuilder等仍然会被使用。

例如,您可以使用/request/@url之类的内容获取<request/>元素,使用/request或请求的URL。

另一种方法 - 特别是对于可能在同一模式下处理多个文档的高性能使用场景 - 是使用SAX解析,而不是每个处理的XML元素都会收到一个事件,并给出它的名称和属性列表。

+2

现在,StAX是在附近,可能非常少的用例SAX会是一个更好的选择。 (这也是一个非常模糊的建议。) – millimoose 2012-01-08 21:26:17