在C#中提取XML内部节点元素
本文关键字:内部节点 元素 XML 提取 | 更新日期: 2023-09-27 17:59:20
我有一个XML文档,如下所示:
<root>
<key>
<id>v1</id>
<val>v2</val>
<iv>v3</iv>
</key>
</root>
如何使用C#中的v1
值提取key
节点的v2
值和v3
值?
使用Linq。
var myXml = XDocument.Parse("<root>
<key>
<id>v1</id>
<val>v2</val>
<iv>v3</iv>
</key>
</root>").Root.Elements("key")
.FirstOrDefault(x=> x.Element("id").Value == value);
if (myXml != null)
{
var myObject = new
{
id = myXml.Element("id").Value,
val = myXml.Element("val").Value,
iv = myXml.Element("iv").Value
});
}
当然,如果需要,您需要检查缺少的元素等。
使用xpath:
/root/key[id='v1']/val
/root/key[id='v1']/iv
所以像这样的东西
myXmlDoc.SelectSingleNode("/root/key[id='v1']/val").Value
myXmlDoc.SelectSingleNode("/root/key[id='v1']/iv").Value
我喜欢使用LINQ to XML来处理XML:
var xml = XElement.Parse(@"<root>
<key>
<id>v1</id>
<val>v2</val>
<iv>v3</iv>
</key>
</root>");
var key = xml.Elements("key").First(x => x.Element("id").Value == "v1");
Console.WriteLine("val: " + key.Element("val").Value);
Console.WriteLine(" iv: " + key.Element("iv").Value);
为了简洁起见,我忽略了所有的错误检查。
例如,如果找不到元素,First()将引发异常。如果您希望使用FirstOrDefault()并检查null,或者更优雅地处理边缘情况。
Element()调用也是如此。他们可能会返回null,因此调用.Value可能会导致System.NullReferenceException。为了避免混乱,我通常使用扩展方法来进行这些检查:
static class XElementUtilities
{
public static string GetValue(this XElement xml, string name)
{
var element = xml.Element(name);
return element == null ? null : element.Value;
}
public static bool ValueEqual(this XElement xml, string name, string value)
{
var element = xml.Element(name);
return element != null && value != null && element.Value == value;
}
}