【发布时间】:2016-06-22 14:31:01
【问题描述】:
给定 XML:
<root name="value">
<level1>
<level2>Text</level2>
</level1>
</root>
我希望 XPath /root/@name 返回 value,XPath /root/level1 返回 <level1> 节点的 XML 序列化:
<level1>
<level2>Text</level2>
</level1>
我在 Java 中使用来自 Saxon 9.6 的 a9api 接口。
我发现我可以调用XdmValue.toString() 来获取XPath 评估结果的XML 序列化,这可以让我获得选择元素所需的结果,但在选择属性时返回name="value"。我可以调用XdmItem.getStringValue() 来获取string value,这会为我获取正确的属性值,但会返回元素的文本内容。
Michael Kay 之前有said "Saxon's s9api interface ... returns XdmValue objects whose type you can interrogate"。我可以看到我可以执行instanceof 检查以确定它是XdmAtomicValue、XdmExternalObject、XdmFunctionItem 还是XdmNode,但元素和属性都是XdmNode 的实例。如何区分两者?
(我无法修改 XPath,因为它们是由用户提供的。)
【问题讨论】: