1

我正在尝试使用 Saxon 9.5 HE Java 库在 XML 文档中进行一些 XPaths 查询。我使用 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();
    }
}

谢谢和亲切的问候:)

4

2 回答 2

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();
    }
}
于 2013-05-31T11:48:26.657 回答
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

于 2013-05-31T10:09:22.110 回答