从具有特定数据名称和值键的xml中获取数据

本文关键字:数据 xml 获取 | 更新日期: 2023-09-27 18:11:37

我想从xml中获取数据,但是有很多标签,字段和值键。我无法选择我想要的值。我如何用c#从这个XML中选择"错误"值?

<?xml version="1.0" encoding="UTF-8"?>
<Database xmlns="http://www.example.com/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <Datas>
  <Data name="sMsg" access="private" xsi:type="collection" type="string">
     <Value key="Cycle" value="deger1" />
     <Value key="Error" value="deger2" />
     <Value key="Info" value="deger3" />
     <Value key="Jog" />
     <Value key="Warning" />
  </Data>
  <Data name="tTabla" access="private" xsi:type="array" type="tabla" size="1">
     <Field name="dddd" xsi:type="array" type="bool" size="1" />
     <Field name="ssss" xsi:type="array" type="bool" size="1" />
     <Field name="aaaa" xsi:type="array" type="num" size="1" />
     <Field name="rrrr" xsi:type="collection" type="num">
         <Value key="Actuel" />
        <Value key="Expected" />
     </Field>
  </Data>
 </Datas>
</Database>

从具有特定数据名称和值键的xml中获取数据

您可以这样尝试:

var doc = XDocument.Parse(xml);
XNamespace d = doc.Root.GetDefaultNamespace();
var result = (string)
    doc.Descendants(d + "Data")
       .Elements(d + "Value")
       .FirstOrDefault(o => (string) o.Attribute("key") == "Error")
       .Attribute("value");
Console.WriteLine(result);

试试这个,它返回Key等于ErrorXElement

 XDocument m = XDocument.Load(@"Path");
 var res = m.Descendants().Where(x => x.Name.LocalName.Equals("Value") && x.Attribute("key") != null && x.Attribute("key").Value.Equals("Error")).FirstOrDefault();

如果你的属性有多个"Error"值,你可以这样做:

IEnumerable<XAttribute> answer = xml.Descendants().Attributes().Where(node => node.Value == "Error");
foreach (var xAttribute in answer)
{
    Console.WriteLine(xAttribute.Value);
}

如果您只想要第一个或只有一个:

string answer = xml.Descendants().Attributes().FirstOrDefault(node => node.Value == "Error");

注意FirstOrDefault可能产生null,如果它没有发现任何"错误"值在你的xml。

这些查询是使用LINQ To XML完成的,我强烈建议您仔细阅读