Vb.net 使用xmlDocument、xmlNode和xmlNodelist从xml检索数据

Vb.net 使用xmlDocument、xmlNode和xmlNodelist从xml检索数据,vb.net,Vb.net,这是vb.net中的一个示例代码,我在其中检索没有属性的元素的详细信息 For Each standardItemInfoNode In ItemInfoNodes baseDataNodes = ItemInfoNodes.ChildNodes bFirstInRow = True For Each baseDataNode As XmlNode In baseDataNodes If (bFirstInRow) Then

这是vb.net中的一个示例代码,我在其中检索没有属性的元素的详细信息

For Each standardItemInfoNode In ItemInfoNodes
        baseDataNodes = ItemInfoNodes.ChildNodes
        bFirstInRow = True
        For Each baseDataNode As XmlNode In baseDataNodes
            If (bFirstInRow) Then
                bFirstInRow = False
            Else
                Response.Write("<br>")
            End If
            Response.Write(baseDataNode.Name & ": " & baseDataNode.InnerText)
        Next
    Next
ItemInfoNodes中每个standardItemInfoNode的

baseDataNodes=ItemInfoNodes.ChildNodes
bFirstInRow=True
将每个baseDataNode作为baseDataNodes中的XmlNode
如果(bFirstirow)那么
bFirstInRow=False
其他的
响应。写入(“
”) 如果结束 Response.Write(baseDataNode.Name&“:”&baseDataNode.InnerText) 下一个 下一个

如何检索xml的详细信息,比如具有属性的节点及其子节点也具有属性。我需要检索存在于其他XML标签中间的节点及其子节点的所有属性。

我不确定你到底在问什么,我不能给你一个具体的例子,而不知道你要处理的XML格式。但我认为您需要的是XmlNode对象的Attributes属性。每个XmlNode都有一个Attributes属性,允许您访问该节点的所有属性。下面的MSDN页面对此进行了解释(并提供了一个简单的示例):

编辑:

使用您在注释中发布的示例XML,您可以读取以下所有值和属性:

    Dim doc As XmlDocument = New XmlDocument()
    doc.LoadXml("<EventTracker><StandardItem><Header1>Header1 Text</Header1> <Header2>Header2 Text</Header2></StandardItem><Item> <Events> <EventSub EventId='73' EventName='Orchestra' Description='0'> <Person PersonId='189323156' PersonName='Chandra' Address='Arunachal'/><Person PersonId='189323172' PersonName='Sekhar' Address='Himachal'/></EventSub> </Events> </Item> </EventTracker>")
    Dim header1 As String = doc.SelectSingleNode("EventTracker/StandardItem/Header1").InnerText
    Dim header2 As String = doc.SelectSingleNode("EventTracker/StandardItem/Header2").InnerText
    For Each eventSubNode As XmlNode In doc.SelectNodes("EventTracker/Item/Events/EventSub")
        Dim eventId As String = eventSubNode.Attributes("EventId").InnerText
        Dim eventName As String = eventSubNode.Attributes("EventName").InnerText
        Dim eventDescription As String = eventSubNode.Attributes("Description").InnerText
        For Each personNode As XmlNode In eventSubNode.SelectNodes("Person")
            Dim personId As String = personNode.Attributes("PersonId").InnerText
            Dim personName As String = personNode.Attributes("PersonName").InnerText
            Dim personAddress As String = personNode.Attributes("Address").InnerText
        Next
    Next
Dim attribute As XmlNode = personNode.Attributes.GetNamedItem("PersonId")
If attribute IsNot Nothing Then
    Dim personId As String = attribute.InnerText
End If

但是,序列化会更容易,因为反序列化对象对于任何不存在的元素都只具有null属性。

您可以使用
选择SingleNode(“XPath或NodeName”)
并在该节点上循环
Attributes.Item(index)
。如果您事先知道childnode的名称,还可以循环使用
SelectSingleNode(“XPath或NodeName”).SelectSingleNode(“XPath或ChildName”).Attributes.Item(index)

您可以提供一个示例XML文档来说明您所说的内容吗?顺便说一下,如果您只是将XML文档转换为不同格式的输出HTML或XML文档,我强烈建议您使用XSLT脚本和
xslcomiledtransform
类来转换文档。标题1文本标题2文本。如果像这样在顶部添加Header1和Header2,代码会是什么。抱歉再次问您。@user1407900您为什么要发布第二个XML文档?看起来我的代码仍然可以处理这个问题。请检查我的第二条注释。@user1407900您需要读取Header1和2的值,还是忽略它们?