使用:
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="*">
感谢?
答案 0 :(得分:2)
我推荐使用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
元素上打印url
元素的内容和request
属性的值。
输出:
预订已创建!
/设备/测试/计划
答案 1 :(得分:1)
使用XPath - 也可通过standard Java APIs随时使用。获得Document
后,Java的XPath可以直接评估它 - 所以仍然可以使用DocumentBuilder
等。
例如,您可以使用<request/>
获取/request
元素,或使用/request/@url
等内容获取请求的网址。
另一种选择 - 特别是对于您可能在同一模式下处理许多文档的高性能使用场景 - 是使用SAX解析,您将在其中接收处理的每个XML元素的事件,并给出其名称和列表属性。