【发布时间】:2019-01-02 11:17:02
【问题描述】:
假设我有一些如下所示的 XML:
<Users>
<User>Bob</User>
<User>Stefania</User>
</Users>
如果我想选择第 3 行,其中一种方法是使用 local-name():
//*[local-name()='Users']/*[local-name()='User'][1]
我的问题是这样的。是否可以使用一个语句选择多个节点?我试过了:
//*[local-name()='Users/User'][1]
实际上,字符串会被变量替换。在 XForms 中,一个真实的示例如下所示:
<xf:var name="users" value="'Users"/>
<xf:var name="user" value="'User"/>
<xf:setvalue ref="//*[local-name()=$users/$user][1]" value="'Jim'"/>
但这不起作用。
我希望能够做到这一点:
<xf:var name="users" value="'Users"/>
<xf:var name="user" value="'User"/>
<xf:var name="myPath" value="'$users/$user'"/>
<xf:setvalue ref="//*[local-name()=$myPath][1]" value="'Jim'"/>
【问题讨论】:
-
“选择多个节点”的意思是要同时选择
<User>Bob</User>和<User>Stefania</User>? -
不,我的意思是单个路径中有多个节点。 (不是 100% 节点是正确的术语)。请参阅我刚刚在最后添加的示例。
-
简短的回答是否,你不能写
//*[local-name()=$users/$user]而不是//*[local-name()=$users]/*[local-name()=$user]。你只是想找到一个更短的语法,还是有更多的东西? -
@avernet 不,除了找到更短的语法外,没有什么别的了。谢谢你。我开始认为你说的没有更短的语法是对的。
-
知道了,然后我看不到任何更短的写
//*[local-name()=$users]/*[local-name()=$user]的方法。对不起!