可以在XPATH查询的返回值中排除一个节点中的某些属性

时间:2014-08-08 22:31:16

标签: select xpath attributes

案例是

<a>
   <p id="1" userName="administrator" password="xxx" />
</a>

如果我使用“/ a / p”作为xpath查询,那么它将返回

<p id="1" userName="administrator" password="xxx" />

但是,我只想显示属性id和userName,我该怎么做?

此外,我不想使用任何xpath标准函数。

2 个答案:

答案 0 :(得分:1)

您可以尝试在属性名称的开头使用@来解决XPath中的属性,例如:

/a/p/@id

或同时获得iduserName

/a/p/@*[name() = 'id' or name() = 'userName']

或者如果您打算获取除password以外的所有属性(因为您有&#39;排除&#39;标签):

/a/p/@*[name() != 'password']

更新:

回应您的评论,使用concat()函数在XPath 1.0中实际上有一个非常有限的解决方法:

concat(/a/p/@*[name() = 'id'], ', ', /a/p/@*[name() = 'userName'])

答案 1 :(得分:0)

XPath(1.0或2.0)只能返回输入文档中存在的节点,它不能创建新的或修改过的节点。为此你需要XSLT或XQuery。

您可以返回从输入文档中的节点构造的字符串,数字或布尔值 - 但这样做不使用任何标准函数听起来像受虐狂。