0

假设一些像

<foo>
  <bar>test</bar>
</foo>

使用 returnType = String 评估表达式

/foo/bar

将返回“测试”。但是,我想获取序列化的 xml,所以类似于

<bar>test</bar>

应该返回。由于我无法检查 java 的 xpath 实现 (xerces) 中的 returnType,因此我不能简单地获取一个对象作为结果,如果它确实是一个节点,则将其转换为序列化的 xml。

注意:我不知道表达式是否会实际返回节点、字符串、数字或其他任何内容,因此我无法为 eval 函数提供适当的返回类型,除了字符串,正如我的问题所述,返回文本内容而不是序列化的xml。

所以我很好奇->是否有java-或(首选)xpath-way(函数?)来获取类型字符串的序列化xml而不是所选节点的文本子节点?

谢谢!亚历克斯

4

3 回答 3

1

使用 xpath 返回类型 XPathConstants.NODE 然后您可以自己序列化返回的节点。

于 2012-05-18T15:51:34.683 回答
0

现在,您发现很难发现结果的返回类型是对的;这是 JAXP 真正的设计弱点。

如果这对您有问题,请考虑使用 Saxon 的 s9api 接口,该接口返回您可以查询其类型的 XdmValue 对象;作为奖励,您还可以获得 XPath 2.0 访问权限。

于 2012-05-18T17:09:12.693 回答
0

正如 Michael Kay 所回答的,这在 JAXP(本机 Java 接口)中很困难。

在 Kay 先生的 Saxon 库的 s9api API 中(请参阅使用 s9api 评估 XPath 表达式),一旦你调用了XPathSelector.evaluate()或者XPathSelector.evaluateSingle()你可以通过调用 XdmValue.toString().

但是,如果 XPath 选择了一个属性(例如//@name),您仍然会得到 XML 序列化,例如name="value". 您可以调用XdmItem.getStringValue(),但对于元素,该方法将返回您已经看到的相同值 - 元素的文本内容,而不是序列化。我已经单独发布了关于如何区分从 Saxon s9api 返回的属性和元素的文章

于 2016-06-22T14:07:31.680 回答