要得到属性数量您可以使用下面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
值
其实'计数空间(namespace :: *)'将计算的数量,范围命名空间,即它也将包含从祖先元素继承的命名空间。 –