用XML标记检索Saxonica中的XPath结果

问题描述 投票:0回答:1

我正在尝试通过net.sf.saxon中的Saxonica API使用其他xpath来查询XML文件,但是似乎每次查询操作返回的结果都没有xml标签-仅包含内容。有没有办法做到这一点(直截了当或变通)?

更明确地说:

对于xml文件

<books>
    <book lang="en">
        <nrpages>140</nrpages>
        <author>J.R.R.Tolkien</author>
    </book>
</books>

和xpath

//book

我想检索

<book lang="en">
    <nrpages>140</nrpages>
    <author>J.R.R.Tolkien</author>
</book>

代替

140
J.R.R.Tolkien

我尝试过的:

XPathFactory factory = new XPathFactoryImpl();
XPathExpression compiledXPath = factory.newXPath().compile(xPathExpression);
TinyNodeImpl nodeItem = (TinyNodeImpl) compiledXPath.evaluate(new InputSource(filename), XPathConstants.NODE);
nodeItem.atomize(); // brings only the content
nodeItem.getStrinValue(); // brings only the content
java xpath saxon
1个回答
2
投票
如果您希望将节点序列化为词法XML,则有多种实现方法。如果要使用Saxon的s9api接口而不是JAXP接口,则建议使用XdmNode.toString()。使用JAXP接口然后转换为内部Saxon类会让您两全其美:您会遇到JAXP的所有问题(例如,弱类型输入,不提供XPath 2.0支持),却没有任何好处(实现之间的可移植性)。但是,如果您更喜欢这样做,那么序列化Saxon节点的最简单方法可能就是静态方法QueryResult.serialize(NodeInfo)。该方法的3个参数版本使您可以完全控制序列化属性,例如缩进和添加XML声明。

使用XPath 3.1,您还可以通过调用fn:serialize()在XPath表达式本身内调用序列化;这样可以避免在Java代码中使用任何特定于Saxon的类和方法。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.