任何人都可以提供一个使用java中的xpath从xml文件中提取所有元素及其属性和值的示例吗?
由于
答案 0 :(得分:5)
几年前我为我的团队写了这篇文章。会有所帮助。
在XPath中,有七种节点:元素,属性,文本,名称空间,处理指令,注释和文档(根)节点。 XML文档被视为节点树。树的根称为文档节点(或根节点)。
考虑以下Xml文档。
<information>
<person id="1">
<name>Tito George</name>
<age>25</age>
<gender>Male</gender>
<dob>
<date>25</date>
<month>october</month>
<year>1983</year>
</dob>
</person>
<person id="2">
<name>Kumar</name>
<age>32</age>
<gender>Male</gender>
<dob>
<date>28</date>
<month>january</month>
<year>1975</year>
</dob>
</person>
<person id="3">
<name>Deepali</name>
<age>25</age>
<gender>Female</gender>
<dob>
<date>17</date>
<month>january</month>
<year>1988</year>
</dob>
</person>
</information>
从文档中获取信息
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
//Getting the instance of DocumentBuilderFactory
domFactory.setNamespaceAware(true);
//true if the parser produced will provide support for XML namespaces;
DocumentBuilder builder = domFactory.newDocumentBuilder();
//Creating document builder
Document doc = builder.parse("C:\\JavaTestFiles\\persons.xml");
XPath xpath = XPathFactory.newInstance().newXPath();
//getting instance of xPath
expr = xpath.compile("//@id");
result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println(nodes.item(i).getNodeValue());
}
上面的红色线是用于编译xPath表达式的行,// @ id是实际的表达式。表达式@@ id将返回文档中属性id的值。即。程序的输出将是1 2和3.在下表中,您可以找到可以在本文档中使用的各种表达式。
上面代码段中的两个重要声明是
基本上: XML文档是树状结构(分层)节点集合。与分层目录结构一样,指定指向层次结构中特定节点的路径(因此指定的名称:XPath)非常有用。
事实上,目录路径的大部分符号都是完整的:
答案 1 :(得分:3)
以这种方式使用此XPath表达式"//*"
Document doc = ... // the document on which apply XPath
XPathExpression xp = XPathFactory.newInstance().newXPath().compile("//*");
NodeList elements = (NodeList) xp.evaluate(doc, XPathConstants.NODESET);
它会返回任何级别的所有元素。