-1

これは、属性のない要素の詳細を取得する 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 タグの途中にあるノードとその子ノードのすべての属性を取得する必要があります。

4

2 に答える 2

0

そのノードでを使用SelectSingleNode("XPath or NodeName")してループすることができます。Attributes.Item(index)子ノード名が事前にわかっている場合は、をループすることもできますSelectSingleNode("XPath Or NodeName").SelectSingleNode("XPath or ChildName").Attributes.Item(index)

于 2012-05-25T20:41:28.520 に答える
0

あなたが何を求めているのか正確にはわかりません。処理しようとしている XML の形式を知らずに具体的な例を示すことはできませんが、探しているのは XmlNode の Attributes プロパティだと思いますオブジェクト。各 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 プロパティを持つだけなので、これはシリアル化を使用するとはるかに簡単になります。

于 2012-05-25T12:50:33.620 に答える