鉴于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序列化,这样可以获得选择元素所需的结果,但返回{{1}选择属性时。我可以调用XdmItem.getStringValue()
来获取string value,这会为我获取属性的正确值,但会返回元素的文本内容。
Michael Kay之前已said "Saxon's s9api interface ... returns XdmValue objects whose type you can interrogate"。我可以看到我可以执行name="value"
检查以确定它是instanceof
,XdmAtomicValue
,XdmExternalObject
还是XdmFunctionItem
,但元素和属性是XdmNode
的两个实例。我如何区分这两者?
(我无法修改XPath,因为它们是由用户提供的。)
答案 0 :(得分:3)
我在写完问题时就找到了答案,所以我会为其他人分享。
将XdmNode
转换为XdmItem
后,您可以调用XdmNode.getNodeKind()
,它会从XdmNodeKind
枚举中返回一个值,指定它是哪种类型的节点:
XdmNode