使用 LINQ 读取 XML
本文关键字:XML 读取 LINQ 使用 | 更新日期: 2023-09-27 18:30:45
嗨,我正在寻找要提取的 LINQ 查询
1 级类型,子类型
4 级路径
来自下面的 XML 示例。 我确实在寻找单个 LINQ 查询,以便我可以单步执行生成的数据。
<?xml version="1.0" encoding="utf-8"?>
<Toplevels>
<TopLevel>
<Level1>
<Type>Read this</Type>
<Subtype>Read this</Subtype>
</Level1>
<Level2>
<Level3>
<Level4>
<L4Node path="read this" />
</Level4>
</Level3>
</Level2>
</TopLevel>
<TopLevel>
<Level1>
<Type>Read this</Type>
<Subtype>Read this</Subtype>
</Level1>
<Level2>
<Level3>
<Level4>
<L4Node path="read this" />
</Level4>
</Level3>
</Level2>
</TopLevel>
<TopLevel>
<Level1>
<Type>Read this</Type>
<Subtype>Read this</Subtype>
</Level1>
<Level2>
<Level3>
<Level4>
<L4Node path="read this" />
</Level4>
</Level3>
</Level2>
</TopLevel>
</Toplevels>
谁能帮忙?
提前致谢
您可以使用此代码来获取type
并尝试在尝试执行其他操作的同时提高您的编程技能
XDocument doc =XDocument.Load("D:''tmp.xml");
foreach (XElement element in doc.Element("Toplevels").Elements("TopLevel"))
{
string str = element.Element("Level1").Element("type").Value;
string lvl4 = element.Element("Level1").Element("Level2").Element("Level3").Element("Level4").Element("L4Node").Attribute("path").Value;
}
您可以使用
Descendants
搜索后代节点。
// using LINQ
var xdoc = XDocument.Parse(XML);
var subtypes = xdoc.Descendants("Level1").Descendants("Subtype");
Console.WriteLine("LINQ Level1 Subtype");
foreach (var el in subtypes)
{
Console.WriteLine(el.Value);
}
var paths = xdoc.Descendants("Level4").Descendants("L4Node").Attributes("path");
Console.WriteLine("LINQ Level4 Path");
foreach (var el in paths)
{
Console.WriteLine(el.Value);
}
LINQ 的替代方法是使用 XPath
// using XPath
var doc = new XmlDocument();
doc.LoadXml(XML);
var subtype2 = doc.SelectNodes("/Toplevels/TopLevel/Level1/Subtype");
Console.WriteLine("XPath Level1 Subtype");
foreach (XmlNode el in subtype2)
{
Console.WriteLine(el.InnerText);
}
// using XPath shorter, less efficient
var subtype3 = doc.SelectNodes("//Level1/Subtype");
Console.WriteLine("XPath Level1 Subtype");
foreach (XmlNode el in subtype3)
{
Console.WriteLine(el.InnerText);
}