[英]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.