使用 vb.net 从生成的 XML - 文件中读出特定的子节点
本文关键字:子节点 文件 XML net vb 使用 | 更新日期: 2023-09-27 18:32:00
我一直在使用我的XMLReader来读取MS InfoPath生成的XML文件已经有一段时间了。现在我面临的问题是,在不同的父节点中有多个具有相同生成名称的节点,我需要将它们分开。
例:
If .NodeType = XmlNodeType.Element Then
If .Name = "pc:DisplayName" Then
projectteam &= vbTab
pteamDataset = True
End If
End If
这就是我到目前为止用来搜索pc:DisplayName
中是否有任何元素
所以现在我在几个组中都有这个元素。这意味着如果我仍然使用此代码,则所有组中的所有人都将保存到projectteam
可悲的是,它不适用于完整的xPath:
If .Name = "my:projectteam1/pc:person/pc:DisplayName" Then
projectteam1 &= vbTab
If .Name = "my:projectteam2/pc:person/pc:DisplayName" Then
projectteam2 &= vbTab
有没有其他方法可以调用特定的子节点,或者我真的必须递归显示数据?
XmlReader
不会跟踪每个元素的路径,但您可以自己跟踪它,也许是这样的:
Dim path = New Stack(Of String)()
Using r = New XmlTextReader(...)
While r.Read()
If r.NodeType = XmlNodeType.Element Then
path.Push(r.Name)
Dim fullPath = String.Join("/", path.Reverse())
' May need .EndsWith, since root element will be in path?
If fullPath = "my:projectteam1/pc:person/pc:DisplayName" Then
projectteam1 &= vbTab
ElseIf fullPath = "my:projectteam2/pc:person/pc:DisplayName" Then
projectteam2 &= vbTab
End If
ElseIf r.NodeType = XmlNodeType.EndElement Then
path.Pop()
End If
End While
End Using
path
堆栈用于跟踪当前元素的路径,fullPath
包含可以检查的当前元素的类似 XPath 的路径。