使用 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

有没有其他方法可以调用特定的子节点,或者我真的必须递归显示数据?

使用 vb.net 从生成的 XML - 文件中读出特定的子节点

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 的路径。