0

私はこのXMLファイルを持っています:

<MyFile>
    <PossibleResponses>
        <Response text="response1"/>
        <Response text="response2"/>
    </PossibleResponses>
</MyFile>

応答の1つを取得しようとしています。

var selectedResponse = (from i in XElement.Load("MyFile.xml").Elements("PossibleResponses")
where i.Element("Response").Attribute("text").Value == parameter
select i.Element("Response")).Single();

ここで、最初の応答(parameter = response1)を取得しようとすると、機能します。2番目の応答(パラメーター= response2)を取得しようとすると、結果は返されません。

XMLファイルで順序を切り替えると、response2が返されますが、response1は返されません。

4

3 に答える 3

0

これが発生しているのは、select句でi.Element("Response")再度呼び出しているためです。これは、ドキュメントによると、ドキュメントの順序で最初の要素(つまり、response1)を返します。

于 2012-10-04T15:30:55.090 に答える
0

クエリを次のように変更します。

var selectedResponse = (from p in XDocument.Load("MyFile.xml") where p.Descendents("MyFile").Descendents("PossibleResponses").Descendents("Response").Any(k=>k.Attribute("text").Value == parameter) select p).Single();

ここに直接書いたので、構文エラーがあるかもしれません。アイデアは、指定された名前のすべての要素を提供する「子孫」メソッドを使用し、必要な特定の値の要素をフィルター処理して選択することです。

于 2012-10-04T15:33:06.743 に答える
0

私はこの回答に助けられましたが、いくつかの修正を行いました。

var result = from i in XElement.Load("MyFile.xml").Descendants("Response")
    where i.Attribute("text").Value == "response2"
    select i;

Linqについての私の限られた理解によると、ここで重要なのは、'XElement.Load( "MyFile.xml")。Descendants( "Response")'が要素のリストを返すことだと思います。1。'Where
'句は直接参照する必要があります要素レベルでは、その要素を「再メンション」する必要はありません。
2.「Select」句についても同じです。

他の説明は大歓迎です:)

于 2012-10-08T11:03:23.607 に答える