XPath选择没有特定可选属性的节点

And*_*ava 3 xml xpath

我需要到达此XML结构中的第一个节点进行一些更改:

<root-node>
    <child mandatory="val">
        ...
    </child>
    <child mandatory="val" optional1="opt1">
        ...
    </child>
    <child mandatory="val" optional1="opt2" optional2="opt3">
        ...
    </child>
</root-node>
Run Code Online (Sandbox Code Playgroud)

请注意,所有子项都具有强制属性,该属性在所有情况下都具有相同的值,以及一个或多个可选属性.但是,如果我做一个XPath,//root-node/child[@mandatory='val']我担心我也可能会引用其他节点,我不想触及.

有没有什么方法可以更具体,并排除其结构中存在某个属性的节点?

Ser*_*kiy 6

以下XPath将返回属性等于且未定义属性的child元素:mandatoryvaloptional1

//child[@mandatory='val' and not(@optional1)]
Run Code Online (Sandbox Code Playgroud)

如果只需要第一个元素,那么只需添加[1]到表达式:

root-node/child[@mandatory='val' and not(@optional1)][1]
Run Code Online (Sandbox Code Playgroud)