使用javas xpath获取一个唯一的集合

时间:2010-06-03 17:31:02

标签: java xpath

给出以下xml文档(假设实际列出了更多书籍)并使用xpath的java实现。 我将使用什么表达式来查找一组唯一的作者姓名?

<inventory>
    <book year="2000">
        <title>Snow Crash</title>
        <author>Neal Stephenson</author>
        <publisher>Spectra</publisher>
        <isbn>0553380958</isbn>
        <price>14.95</price>
    </book>

    <book year="2005">
        <title>Burning Tower</title>
        <author>Larry Niven</author>
        <author>Jerry Pournelle</author>
        <publisher>Pocket</publisher>
        <isbn>0743416910</isbn>
        <price>5.99</price>
    </book>

    <book year="1995">
        <title>Zodiac</title>
        <author>Neal Stephenson</author>
        <publisher>Spectra</publisher>
        <isbn>0553573862</isbn>
        <price>7.50</price>
    </book>

    <!-- more books... -->

</inventory>

1 个答案:

答案 0 :(得分:5)

Set<String> uniqueAuthors = new HashSet<String>();
XPathFactory factory = XPathFactory.newInstance();
XPath xPath = factory.newXPath();
XPathExpression expr = xpath.compile("//book/author/text()");
NodeList nodes = (NodeList)expr.evaluate(doc, XPathConstants.NODESET);
for (int i = 0; i < nodes.getLength(); ++i) {
    uniqueAuthors.add(nodes.item(i).getNodeValue());
}

我使用了优秀的文章“The Java XPath API”作为参考。

XPath版本1.0通常不能选择不同的值,因此我将作者插入Set。在for循环结束时,该集将包含所有作者。