XPath:获取元素类型

时间:2014-02-08 14:31:01

标签: xml xpath

这是一个XPath查询,它将打印文件中每个元素的完整路径

for $boy in //*
return string-join(($boy/ancestor-or-self::*/name()), "::")

如何获取元素的类型(我需要知道最基本的类型:xs:integerxs:string等)?

2 个答案:

答案 0 :(得分:2)

没有确定元素类型的函数。当你使用flwor表达式时,我想你的XPath处理器支持XPath 2.0:然后你可以使用instance of来确定类型,例如。

  • "foo" instance of xs:string
  • 1 instance of xs:integer
  • //* instance of element()*

您可以使用if/else-chain to determine the type(该示例使用XQuery,在XPath中您无法定义函数),但我现在无法真正想出一个XPath应用程序示例。

答案 1 :(得分:0)

就XPath 2.0标准而言,Jens Erat的答案是正确的。

在Saxon中(你需要EE用于模式识别),有一个扩展函数

saxon:type-annotation()

为您提供值的类型注释为QName,另一个为

saxon:type

它为您提供类型作为架构组件,表示为函数项;您可以通过向此函数提供所需的属性名称来获取该类型的特定属性(包括其名称)。详情

http://www.saxonica.com/documentation/#!functions/saxon

但我发现这不是你所要求的;如果一个元素已被模式验证为整数,它将结果为xs:integer,而不是element()。不过,它可以满足您对原子价值的要求。