从具有特定数据名称和值键的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>
您可以这样尝试:
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
等于Error
的XElement
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完成的,我强烈建议您仔细阅读