Saxon XPathEvaluator仅返回第一个结果

时间:2013-05-31 09:53:52

标签: java xpath saxon

我正在尝试使用Saxon 9.5 HE Java库在XML文档中进行一些XPath查询。我使用net.sf.saxon.xpath.XPathEvaluator创建了查询,并希望从XML文档中获取所有书名。不幸的是我只获得了第一个冠军。这是我的示例代码:

public static void main(String[] args) 
{
    try
    {           
        InputSource is = new InputSource(new File("books.xml").toURI().toURL().toString());
        String x = new XPathEvaluator().evaluate("//book/title", is);

        System.out.println(x);  
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}

谢谢和亲切的问候:)

2 个答案:

答案 0 :(得分:2)

我刚刚使用XPathCompiler实现了一个解决方案:

这很好用。如果您有兴趣,可以查看源代码:

public static void main(String[] args) 
{
    try
    {           
        Processor proc = new Processor(false);
        DocumentBuilder builder = proc.newDocumentBuilder();
        XPathCompiler xpc = proc.newXPathCompiler();

        XPathSelector selector = xpc.compile("//book/title").load();
        selector.setContextItem(builder.build(new File("books.xml")));
        for (XdmItem item: selector) 
        {
            System.out.println(item.getStringValue());
        }
    }   

    catch(Exception e)
    {
        e.printStackTrace();
    }
}

答案 1 :(得分:1)

XPathEvaluator是哪个JAXP?我认为这实现了XPath 1.0语义,其中评估返回一组节点的XPath表达式的字符串结果返回第一个选定节点的字符串值。您可能需要评估节点集,或者可以使用XPath "string-join(//book/title, ', ')"

如果您想拥有一系列字符串值,可以使用http://www.saxonica.com/html/documentation/javadoc/net/sf/saxon/sxpath/XPathEvaluator.html,但该文档建议首选方法是将s9apihttp://www.saxonica.com/html/documentation/javadoc/net/sf/saxon/s9api/XPathCompiler.html一起使用。