XML属性の基準を使用して要素の値を取得しようとしています。本質的には、ドキュメント全体から1つの値が必要なので、直接クエリを実行しようとしています。これは私のXMLファイルです:C# - その属性でxml要素の値を取得
<?xml version="1.0" encoding="UTF-8"?>
<list version="1.0">
<meta>
<type>resource-list</type>
</meta>
<resources start="0" count="1">
<resource classname="Quote">
<field name="name">Microsoft Corporation</field> <!-- I want this!!! -->
<field name="price">49.869999</field>
<field name="symbol">MSFT</field>
<field name="ts">1461960000</field>
<field name="type">equity</field>
<field name="utctime">2016-04-29T20:00:00+0000</field>
<field name="volume">48411684</field>
</resource>
</resources>
</list>
特に、「name」属性を持つフィールドが必要です。これは私がこれを検索するために行ったことです:
XDocument xDoc = XDocument.Parse(httpResponseBody);
string name = (string)xDoc.Elements("field").First(x => x.Attribute("name").Value == "name");
「要素が一致しません」というエラーが表示されます。私がこれを試したり、何かを変更しようとすると、エラーを参照するように設定されていないオブジェクトが得られます。
私はここに簡単な解析ミスを犯しましたが、任意の助けをいただければ幸いと感じ(だけでなく、私が間違って行ってきたところ、私は将来的にこれを防ぐために何を行うことができます!)
ありがとうございました!
'文字列名= InnerText' –
'Elements(" field ")'の代わりに 'Descendants(" field ")'を使用してください。xDoc.SelectSingleNode( "// field [@ name = 'name']" –
@ MathiasR.JessenはLINQを使用することをお勧めしますが、XPathを使用する必要がある場合は 'xDoc.XPathSelectElement(...)'が必要です。 'XDocument'には' SelectSingleNode'メソッドはありません。 –