用于计算XML元素中

时间:2017-02-28 16:18:47

标签: xml xpath

是否可以使用XPath获取XML元素中的属性数量?

<ABC xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

从这个示例行我想得到值2.

如果不可能通过XPath检查是否有任何其他方法来定义命名空间并且XML中没有定义其他前缀?

1 个答案:

答案 0 :(得分:1)

要获取属性的数量,您可以使用XPath表达式

/ABC/count(@*)

在计算命名空间声明时,您可以使用

/ABC/count(namespace::*)-1

但我不确定这是最好的方式......

<强>更新

在目前的情况下,这应该作为

xmlns:xsd=http://www.w3.org/2001/XMLSchema + 
xmlns:xsi=http://www.w3.org /2001/XMLSchema-instance + 
xmlns:xml="http://www.w3.org/XML/1998/namespace" - 1 = 3 - 1 = 2

但正如@Michael Kay所指出的那样,/ABC/count(namespace::*)-1还将计算可能在祖先中定义的名称空间声明......所以只有在你不希望其他祖先的名称空间声明时才可以使用此解决方案元素

至于你的第二个问题,如果你想检查一些特定的前缀,例如xsd已定义,并且它是唯一定义的前缀,您可以尝试以下内容:

//ABC/namespace::*[name()="xsd"] and //ABC/count(namespace::*[name()="xsd"])+ 1 = //ABC/count(namespace::*)

这将返回Boolean