1

こんにちは、この XML ドキュメントからデータを抽出できません。

  <messages messageCount="6">
  <message messageID="9999" orderNumber="1234" model="TESTMODEL" val="490" status="8" timestamp="2012-07-12 13:12:50Z">
  <attributes>
  <attribute name="ATT1" value="1234" /> 
  <attribute name="ATT2" value="5678" /> 
  </attributes>
  </message>
  </messages>

各メッセージを再帰的にループし、メッセージ ノードの値を取得する必要があります。次に、属性をループして、ステータスが特定の値である場合は属性ノードの値を取得する必要があります。ちょっと困っています。これまでのところ、私はこれを持っています

        Dim strStream As New MemoryStream(System.Text.Encoding.UTF8.GetBytes(strMessage))

        Dim XmlDoc As XmlDocument = New XmlDocument

        XmlDoc.Load(strStream)


        Dim nlNodeList As XmlNodeList = XmlDoc.SelectNodes("//messages/message")
        Dim a As XmlAttribute

        For Each nNode As XmlNode In nlNodeList
            Dim strmessageID As String = String.Empty
            For Each a In nNode.Attributes
                If a.Name = "messageID" Then
                    strmessageID = a.Value
                End If
            Next
            For Each nChildNode As XmlNode In nNode.ChildNodes
                For Each b In nChildNode.ChildNodes
                    For Each a In b.Attributes
                        If a.Name = "ATT1" Then

                        End If
                    Next
                Next
            Next
        Next

しかし、属性値の取得に問題があります。これを行うためのよりクリーンな方法もあるに違いないと確信しています。以前はデータセットを使用していましたが、属性値を取得しようとするまでは問題ありませんでした

    For Each dr As DataRow In dsmyDS.Tables("message").Rows
        Dim strMessageID As String = dr.Item("messageid").ToString
        Select Case CStr(dr.Item("model").ToString)
            Case "TESTMODEL"
                Select Case dr.Item("status").ToString
                    Case "8"
                        Dim strval As String = dr.Item("val").ToString
                        'Don't know how to get at the attributes node list once I'm here
                    Case Else

                End Select
            Case Else

        End Select
    Next

誰かが私が間違っていることを教えてくれたらうれしいです。使用するのに最適な方法はどれですか? XMLDocument またはデータセット? 私の面倒な方法よりも簡単な方法はありますか?

どんな助けでも大歓迎です!

4

1 に答える 1

2

LINQ-XMLSystem.Data.Xml をインポートしてみてください。

 Dim doc As XDocument = XDocument.Load(file)
'Or
'Dim doc As XDocument = XDocument.Parse(strMessage)
 Dim Result = doc.Root.Descendants("message")
                      .Where(Function(p)
                                Return p.Attribute("status").Value = "8"
                             End Function)
 For Each ele In Result
     MsgBox(ele.Attribute("messageID").Value)
     MsgBox(ele.Element("attributes").Element("attribute").Attribute("name").Value)

     'List children of attributes tag
     For Each v In ele.Element("attributes").Elements()
          MsgBox(v.Attribute("name").Value & " " & v.Attribute("value").Value)
     Next
 Next
于 2012-07-13T10:15:37.320 に答える