2014-02-08 78 views
1

这是一个XPath查询这将打印的文件的XPath:获得元素类型

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

如何获取元素的类型以及在每个元素的完整路径(我需要最重要的是知道的基本类型:xs:integerxs:string等)?

+0

http://stackoverflow.com/questions/14118670/check-type-of-node-in-xsl-template –

回答

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应用程序示例。

0

对于XPath 2.0标准,Jens Erat的回答是正确的。

在撒克逊(您需要EE的模式感知)有一个扩展功能

saxon:type-annotation() 

它给你一个值作为QName的类型标注,而另一个

saxon:type 

,让你作为模式组件的类型,表示为一个函数项;您可以通过向该函数提供所需的属性名称来获取该类型的特定属性(包括其名称)。在

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

的细节,但我认为这是不太你要的。如果一个元素已经被模式验证为一个整数,它将给出结果为xs:integer,而不是element()。尽管如此,它可以满足你对原子值的要求。