首页 > 解决方案 > 有没有办法在某个父节点中找到某个节点的出现

问题描述

我已经在网上搜索了很多地方以寻找答案,也许我已经阅读了一些内容,或者没有足够努力地研究它,并且对 XML 阅读还很陌生,但是有没有办法让我们说使用getelementbytagname()但只能在一个范围内搜索如此理想的父节点的某些出现将是getelementbytagname("childnode").("parentnode").(i)i 在某个点递增的地方。父节点具有相同的名称,因此在我的情况下,文件中有多个“标题”标签,其中包含我需要的同名信息。

我知道如何去阅读一个 xml 文件,我也知道如何提取我真正想要的信息,但我正处于它变得非常混乱并且证明方式太乏味的地步。例如,我有一个 XML 文件,其中基本上有 3 条不同的记录,“Header”是父节点,然后它会有子节点/元素,例如“billnumber”、“customername”等,这些将被称为每个“标题”中的相同只是不同的值。

而 xml.Read

            If xml.Name = "Header" Then


                builder.Append("Bill:")

                xml.Read()



                While Not xml.Name = "Header"


                    xml.WhitespaceHandling = 1


                    If xml.Name = "BillNumber" Then
                        xml.Read()

                        BillNumber = xml.value()

                         xml.Read()

                    End If

所以这是我如何从某些“标题”获取信息的简要方法,我想知道是否有一种方法可以通过使用count = doc.GetElementsByTagName("Header").Count然后基本上使用计数器来获取“标题”元素的计数,例如i我说的做类似getElementByTagName("BillNumber").("Header").(i)或类似的事情。这样我就可以避免阅读整个文件,而只需挑选某些部分,因为文件中有更多信息。

标签: xmlvb.net

解决方案


听起来你的 XML 看起来像这样......

<header>
  <billnumber>1</billnumber>
  <customername>john</customername>
</header>
<header>
  <billnumber>2</billnumber>
  <customername>bob</customername>
</header>
<header>
  <billnumber>3</billnumber>
  <customername>richard</customername>
</header>

您可以使用 System.XML 命名空间中的方法非常轻松地使用它。如果我对您的问题的理解是正确的,那么这应该是一个很好的起点:

Dim xmldoc As New System.Xml.XmlDocument
xmldoc.Load("myfile.xml")

For Each HeaderNode As System.Xml.XmlNode In xmldoc.SelectNodes("header")
    Debug.Print("bill number is: " & HeaderNode("billnumber").Value)
    Debug.Print("customer name is: " & HeaderNode("customer name").Value)
Next

推荐阅读