0

我有这个 XML 文件:

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

我正在尝试检索其中一个回复:

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

现在,如果我试图获得第一个响应(参数 = response1),那么它可以工作。如果我试图获得第二个响应(参数 = response2),那么它不会返回任何结果。

如果我在 XML 文件中切换它们的顺序,则返回 response2 但不返回 response 1。

4

3 回答 3

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 回答
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

发生这种情况是因为在您的 select 子句中您i.Element("Response")再次调用,根据文档返回文档顺序中的第一个元素(即 response1)。

于 2012-10-04T15:30:55.090 回答