使用IEnumerable< T>解析XML

本文关键字:解析 XML IEnumerable 使用 | 更新日期: 2023-09-27 18:13:34

我使用Linq将一个简单的XML文件解析为var (ienumerable),我正在努力将数据导出到单独的字符串变量中。我使用了一个简单的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>

使用IEnumerable< T>解析XML

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

在查看了示例xml之后,我编写了以下代码(在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);

试着看看这里给出的逻辑,是否对你有帮助