簡體   English   中英

根據前一個節點的屬性獲取同級屬性值

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

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