簡體   English   中英

如何使用 XPath 中的屬性比較 select 元素

[英]How to select an element by using attribute comparsion in XPath

我正在嘗試獲取具有子節點的元素,該子節點與另一個節點具有相同的名稱(具有特定條件)。 資源:

<objects>

  <object>
    <element>
      <type name="thing"></type>
    </element>
  </object>

  <object>
    <prog name="thing">
      <extends>SuperClass</extends>
    </prog>
  </object>

</objects>

我想獲取一個對象的元素,如果它的類型與另一個 object 的 prog(條件:prog 擴展“SuperClass”)具有相同的名稱。

我的 Xpath:

./objects/object/element[./type/@name={ancestor::objects/object/prog[./extends/text()='SuperClass']/@name}]

我想獲取一個對象的元素,如果它的類型與另一個 object 的 prog(條件:prog 擴展“SuperClass”)具有相同的名稱。

//element[type/@name = //prog[extends = 'SuperClass']/@name]

"選擇所有<element> ,其中<type>/@name等於任何<prog>@name ,其中包含等於'SuperClass'<extends> "

你幾乎已經擁有它了。 XPath 沒有屬性值模板(即花括號中的表達式) - 這是 XSLT 功能,在這里甚至不需要。 失去他們,它的工作原理:

./objects/object/element[./type/@name=ancestor::objects/object/prog[./extends/text()='SuperClass']/@name]

一旦你剪掉了絨毛(例如./無論如何大部分時間都是隱含的,以及/text() ,它會做一些你經常不想要的事情),它看起來很像我的表達方式。

//element[type/@name = ancestor::objects//prog[extends='SuperClass']/@name]

如果您無論如何都開始查看文檔根目錄,那么ancestor::也是多余的。

//element[type/@name = //prog[extends = 'SuperClass']/@name]

……就是這樣。

暫無
暫無

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

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