簡體   English   中英

XPath使用單個路徑選擇多個節點

[英]XPath select multiple nodes using a single path

假設我有一些看起來像這樣的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'"/>

對於不在名稱空間中的XML,

<Users>
  <User>Bob</User>
  <User>Stefania</User>
</Users>

這個XPath

//User

在單個XPath中選擇多個節點(特別是元素),

  <User>Bob</User>
  <User>Stefania</User> 

按照要求。

*[local-name()='User']構造用於取消名稱空間,不建議這樣做。 請參閱XPath如何處理XML名稱空間? 如果您的XML實際上在名稱空間中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM