我正在尝试使用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();
}
}
谢谢和亲切的问候:)
答案 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,但该文档建议首选方法是将s9api
与http://www.saxonica.com/html/documentation/javadoc/net/sf/saxon/s9api/XPathCompiler.html一起使用。