[英]Get sibling attribute value depending on attribute of a preceding node
我有以下 XML 文件,如果第一個 NODE 元素屬性值為 D920,則需要獲取 3ed NODE 元素屬性 VALUE 的值(在我們的 xml 示例中為“offermann.com.au”和“cosmicpanda.biz”)。
<PRODUCT NAME="home" VERSION="9.0.408" MAJOR="90000" MINOR="198">
<ITEM NAME="plugins">
<ITEM NAME="ADDRLISTS" VERSION="1">
<ITEM NAME="USER">
<ITEM NAME="BL" DELETE="1">
<ITEM NAME="1">
<NODE NAME="F" TYPE="number" VALUE="D920" />
<NODE NAME="A" TYPE="string" VALUE="@offermann.com.au" />
<NODE NAME="N" TYPE="string" VALUE="offermann.com.au" />
</ITEM>
<ITEM NAME="2">
<NODE NAME="F" TYPE="number" VALUE="D920" />
<NODE NAME="A" TYPE="string" VALUE="@cosmicpanda.biz" />
<NODE NAME="N" TYPE="string" VALUE="cosmicpanda.biz" />
</ITEM>
</ITEM>
</ITEM>
</ITEM>
</ITEM>
</PRODUCT>
在VB .Net中,我可以得到屬性NAM = N的所有節點如下
Dim nodeList As XmlNodeList = root.SelectNodes("//NODE[@NAME='N']")
但這帶來了我不需要的所有節點。
如何才能做到這一點?
您可以使用此 XPath-1.0 表達式:
//ITEM[@NAME='BL']/ITEM[NODE[@NAME='F' and @VALUE='D920']]/NODE[@NAME='N']/@VALUE
或者,要在 VB.Net 中獲取相應的元素節點:
Dim AttValue As String
For Each Element As XmlElement In XmlDoc.SelectNodes("//ITEM[@NAME='BL']/ITEM[NODE[@NAME='F' and @VALUE='D920']]/NODE[@NAME='N']")
AttValue = Element.Attributes.ItemOf("VALUE").InnerText;
Console.WriteLine("The value is: " + AttValue)
Next
請注意,此示例代碼不包括錯誤檢查(例如, @VALUE
屬性不存在)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.