xml - 有没有办法在某个父节点中找到某个节点的出现
问题描述
我已经在网上搜索了很多地方以寻找答案,也许我已经阅读了一些内容,或者没有足够努力地研究它,并且对 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)
或类似的事情。这样我就可以避免阅读整个文件,而只需挑选某些部分,因为文件中有更多信息。
解决方案
听起来你的 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
推荐阅读
- excel - EXCEL-VBA:将用户窗体控件另存为图片
- performance - SQLServer:性能计数器中缺少 SSIS 管道 13.0
- r - 在 dplyr() 中使用 str_detect 跨两列进行匹配
- python - 如何使用networkx表示工作流链?
- webpack - import * as (jasmine spyOn) 不可写
- java - 在一个流处理中收集匹配和不匹配?
- mysql - Docker/Mysql 在数据库转储中加载 - 容器在转储完全加载之前上线
- apache-kafka - 为什么在 Kafka Streams 中使用 SessionWindows 时聚合起作用?
- apache-spark - 如何使用 Pyspark 处理来自 Kafka 的 Debezium 事件?
- php - tinymce 粗体内容显示为纯文本