【问题标题】:Get sibling attribute value depending on attribute of a preceding node根据前一个节点的属性获取兄弟属性值
【发布时间】:2019-12-06 18:56:30
【问题描述】:

我有以下 XML 文件,如果第一个 NODE 元素属性值为D920。

<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']")

但这会带来我不需要的所有节点。
如何做到这一点?

【问题讨论】:

    标签: xml vb.net xpath


    【解决方案1】:

    您可以使用这个 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 属性不存在)。

    【讨论】:

    • 谢谢,第二条语句有效,但获取所有值为“D920”的节点。其实为了线程我把xml的行数减少了,后面会给出xml内容的完整例子
    • 使用第二个语句,您将获得所有具有属性NAME 和值为N元素。然后,您必须使用单独的语句从每个 nodeList 项目中检索 VALUE 的属性值。
    • 怎么样?我想不通
    • xz,这将给出与我已经做过的 N 相关的 offermann.com.au 的值。我需要在其值为 D920 之前检查节点,然后获取其名称为 N 的节点的值
    • 我为我的答案添加了另一种方法。我希望现在所有的误解都得到解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2021-02-23
    相关资源
    最近更新 更多