这是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
如何检索xml的详细信息,例如具有属性的节点及其子节点也具有属性。我需要检索节点及其子节点的所有属性,这些属性存在于其他xml标记的中间。
答案 0 :(得分:0)
我不确定你究竟在问什么,如果不知道你想要处理的XML的格式,我就不能给你一个具体的例子,但我认为你要找的是Attributes属性XmlNode对象。每个XmlNode都有一个Attributes属性,允许您访问该节点的所有属性。这是解释它的MSDN页面(并提供了一个简单的例子):
http://msdn.microsoft.com/en-us/library/7f285y48.aspx
编辑:
使用您在评论中发布的示例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
但是,如果您像这样加载XML中的所有数据,我建议将XML反序列化为EventTracker对象。或者,正如我在您对帖子的评论中所说,如果阅读XML文档的唯一目的是将其转换为另一个XML或HTML文档,我建议使用XSLT。
如果要测试属性是否存在,可以执行以下操作:
Dim attribute As XmlNode = personNode.Attributes.GetNamedItem("PersonId")
If attribute IsNot Nothing Then
Dim personId As String = attribute.InnerText
End If
但是,序列化会更容易,因为反序列化的对象对于任何不存在的元素都只具有null属性。
答案 1 :(得分:0)
您可以使用SelectSingleNode("XPath or NodeName")
并遍历该节点上的Attributes.Item(index)
。如果您事先知道子节点名称,也可以循环浏览SelectSingleNode("XPath Or NodeName").SelectSingleNode("XPath or ChildName").Attributes.Item(index)
。