使用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>
您可以将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);
试着看看这里给出的逻辑,是否对你有帮助