任何人都可以提供一个使用java中的xpath从xml文件中提取所有元素及其属性和值的示例吗?
谢谢
几年前我为我的团队写了这篇文章。会有帮助的。
在 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 的值。IE。程序的输出将是 1 2 和 3。在下表中,您可以找到本文档中可以使用的各种表达式。
上述代码片段中的两个重要语句是
基本上: XML 文档是节点的树结构(分层)集合。与分层目录结构一样,指定指向层次结构中特定节点的路径很有用(因此规范的名称为:XPath)。
事实上,目录路径的大部分符号都被原封不动地保留下来:
"//*"
以这种方式使用此 XPath 表达式
Document doc = ... // the document on which apply XPath
XPathExpression xp = XPathFactory.newInstance().newXPath().compile("//*");
NodeList elements = (NodeList) xp.evaluate(doc, XPathConstants.NODESET);
它会返回给您任何级别的所有元素。