2017-02-28 168 views
0

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

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

从这个例子行我想回去值2

如果这是不可能是任何其他方式的XPath查询该命名空间的定义,并有定义在XML中没有其他的前缀?

回答

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 

但作为@迈克尔凯指出/ABC/count(namespace::*)-1亦会计算可能在祖先中定义的命名空间声明。所以可以使用该解决方案只有当你不希望其他祖先元素中的名称空间声明

至于你的第二个问题,如果你想检查某些特定的前缀,例如xsd,被定义,它是唯一定义的前缀,你可以尝试这样的:

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

这将返回Boolean

+0

其实'计数空间(namespace :: *)'将计算的数量,范围命名空间,即它也将包含从祖先元素继承的命名空间。 –