使用IEnumerable <t>解析XML </t>

时间:2011-11-06 10:10:22

标签: c# linq

我正在使用Linq将一个简单的XML文件解析为var(可相关的),我正在将数据输出到单独的字符串变量中。我正在使用一个简单的foreach循环(只有一个结果),但它并没有输出任何东西。这是我正在使用的代码;

XElement xmlResults = XElement.Parse(e.Result);
var timerresult = from timers in xmlResults.Descendants("e2simplexmlresult")
                  select new GetResult
                  {
                    e2state = timers.Element("e2state").Value,
                    e2statetext = timers.Element("e2statetext").Value
                  };

foreach (var item in timerresult)
{
  Debug.WriteLine(item.e2state);
  Debug.WriteLine(item.e2statetext);

}

有什么东西我做得不对,这是达到预期效果的最好方法吗?

编辑:这是XML;

<e2simplexmlresult>
    <e2state>False</e2state>
    <e2statetext>Conflicting Timer(s) detected!  / A Place in the Sun: Home or Away / Goals On Sunday</e2statetext> 
</e2simplexmlresult>

2 个答案:

答案 0 :(得分:1)

您可以将XElement更改为XDocument,或者仍将XElement与DescendantsAndSelf(...)结合使用。通过使用XElement,“e2simplexmlresult”标记不是结果的一部分,因此没有后代。使用DescendantsAndSelf()或使用XDocument克服了这个问题。

答案 1 :(得分:0)

在查看了您的示例x​​ml之后,我编写了以下代码(在LinqPad中)并运行良好:

XElement xml = XElement.Parse(@"<e2simplexmlresult>
            <e2state>False</e2state>
            <e2statetext>Conflicting Timer(s) detected!  / A Place in the Sun: Home or Away / Goals On Sunday</e2statetext> 
        </e2simplexmlresult>");

GetTest test = new GetTest()
       {
           e2state = xml.Elements().Where(x => x.Name == "e2state").First().Value,
           e2statetext = xml.Elements().Where(x => x.Name == "e2statetext").First().Value,
       };

Console.WriteLine(test.e2state);
Console.WriteLine(test.e2statetext);

尝试看看这里给出的逻辑,可以对你有所帮助。