2017-05-14 5 views
0

属性ゲット?私はここに、運にいくつかの方法を試してみました単一のXMLを考えると、次のXMLを価値

はの出力で

Dim doc As XDocument = XDocument.Load(xml) 
Dim result = From x In doc.Descendants("Item") Select x.Attribute("Name").Value 
Console.WriteLine(result) 

結果(コンソールに「XML」の内容を書くことが上記のXMLを表示することに注意してください)最後try- ました。 "[System.Xml.Linq.XElement、列の] System.Linq.Enumerable.WhereSelectEnumerableIterator"

おかげで、次のようにあなたが行うことができ、正確なXMLの構造については

+0

Linqは大文字と小文字を区別します。小さな「n」の代わりに大文字の「N」があります。 – jdweng

答えて

2

Dim result = doc.Root.Element("Item").Attribute("name").Value 

Element()は、特定の名前の単一の子要素を返します。

あなたが以下のコメントで述べたようにXML名前空間関与がある場合は、あなたがItem要素参照するためにXNamespaceの組み合わせや要素のローカル名を使用する必要があります。

Dim path As XNamespace = "path" 
Dim result = doc.Root.Element(path+"Item").Attribute("name").Value 
+0

'System.NullReferenceException'型の未処理例外が発生しました オブジェクト参照がオブジェクトのインスタンスに設定されていません。 – Dan

+0

@Danああ、属性はすべて小文字* 'name' *、 'Name'ではありません – har07

+0

申し訳ありませんが、私はそれをキャッチしませんでした。それは働いている。名前空間が追加された場合、どのような変更が必要でしょうか? Dan

1

を私はXElementオブジェクトを好みます、ずっと少ないタイピング。

Dim xe As XElement 
    ' to load from a file 
    ' Dim yourpath As String = "your path here" 
    ' Dim xe As XElement = XElement.Load(yourpath) 

    ' for testing 
    xe = <Response> 
      <Item name="ItemA"/> 
     </Response> 

    Dim result As String = xe.<Item>[email protected] '<<<<<<<<<<<<<<<<<<< answer 
+0

@ダン - XElementを使用して見てください – dbasnett

+0

私はその解決策も好きです、返信いただきありがとうございます! – Dan

関連する問題