投稿者 mayopee  (社会人) 投稿日時 2018/8/31 11:55:26
XDocument及び、XmlDocumentより値を取得する方法を教えてください。
以下のコードでは、いずれもinnerTextである「山田太郎 40」が返却されます。
希望する値は以下の通りです。

●ID要素は属性のみなので値としてはString.Emptyが欲しい
●Name要素は「山田太郎」のみが欲しい

XMLの設計がまずいということは置いといて、もし以下のような構造のXMLが
あったらという事で、お願いします。

Dim Doc =
       <?xml version="1.0" encoding="utf-8"?>
       <Root>
           <ID id="1">
               <Name>山田太郎
                    <Age>40</Age>
               </Name>
           </ID>
       </Root>

        Console.WriteLine("●XDocumentの場合")
        'ID要素は属性のみなので値としてはString.Emptyが欲しい 
        Dim element1 As XElement = Doc.<Root>.<ID>.First
        Console.WriteLine(String.Format("タグ名:{0}       値:{1}", element1.Name, element1.Value))

        'Name要素は「山田太郎」のみが欲しい 
        Dim element2 As XElement = Doc.<Root>.<ID>.<Name>.First
        Console.WriteLine(String.Format("タグ名:{0}       値:{1}", element2.Name, element2.Value))

        Console.WriteLine()
        Console.WriteLine("●XmlDocumentの場合")
        Dim xmlDoc As New XmlDocument
        xmlDoc.LoadXml(Doc.ToString)
        'ID要素は属性のみなので値としてはString.Emptyが欲しい 
        Dim node1 As XmlNode = xmlDoc.SelectSingleNode("/Root/ID")
        Console.WriteLine(String.Format("タグ名:{0}       値:{1}", node1.Name, node1.InnerText))

        'Name要素は「山田太郎」のみが欲しい 
        Dim node2 As XmlNode = xmlDoc.SelectSingleNode("/Root/ID/Name")
        Console.WriteLine(String.Format("タグ名:{0}       値:{1}", node2.Name, node2.InnerText))
    End Sub