使用:
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="*">谢谢?
发布于 2012-01-09 10:52:02
我赞同使用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());
}
}此代码在request元素上打印body元素的内容和url属性的值。
输出:
已创建
预订!
/devices/test/planner
发布于 2012-01-09 04:02:59
使用XPath -也可以通过standard Java APIs轻松获得。一旦你有了你的Document,Java的XPath就可以直接对它进行计算-所以你的DocumentBuilder和其他东西仍然会被使用。
例如,您可以使用/request仅获取<request/>元素,或者使用类似/request/@url的内容获取请求的URL。
另一种选择是改用SAX解析,在高性能使用场景中,您可能要按照相同的模式处理许多文档,在这种情况下,您将为每个处理的XML元素接收一个事件,并给出它的名称和属性列表。
https://stackoverflow.com/questions/8780773
复制相似问题