我一直在使用我的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
是否有其他方法可以调用特定的childNode,还是我必须以递归方式显示数据?
答案 0 :(得分:1)
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的路径。