C# 解析多个子节点的xml和联接结果
我需要解析一个xml文件,并需要加入节点“驱动程序”的结果。每个“品牌”节点都是唯一的。示例xml文件: 到目前为止,我的代码是:C# 解析多个子节点的xml和联接结果,c#,xml,xml-parsing,C#,Xml,Xml Parsing,我需要解析一个xml文件,并需要加入节点“驱动程序”的结果。每个“品牌”节点都是唯一的。示例xml文件: 到目前为止,我的代码是: 我无法得到“司机”的结果。有一个或多个“驱动程序”节点。语言C可以使用Linq to Xml: var xdoc = XDocument.Load(@"D:\myfile.xml"); var query = from t in xdoc.Descendants("transport") select String.Join(" - ",
我无法得到“司机”的结果。有一个或多个“驱动程序”节点。语言C可以使用Linq to Xml:
var xdoc = XDocument.Load(@"D:\myfile.xml");
var query = from t in xdoc.Descendants("transport")
select String.Join(" - ", t.Elements("driver")
.Select(e => (string)e.Attribute("name")));
如果无法将整个文件加载到内存中:
XmlTextReader reader = new XmlTextReader(@"D:\myfile.xml");
List<string> result = new List<string>();
while (reader.Read())
{
if (reader.Name == "brand")
{
XmlReader inner = reader.ReadSubtree();
List<string> names = new List<string>();
while (inner.Read())
{
if (reader.Name == "driver")
names.Add(reader.GetAttribute("name"));
}
if (names.Any())
result.Add(String.Join(" - ", names));
}
}
这是一个非常大的xml文件。所以“XDocument.Load”不是一个选项,它是一个非常大的xml文件。那么如何在“XmlTextReader”中使用它呢?解析、查询、匿名类型、foreach循环、控制台。。谁投了赞成票?
XmlTextReader reader = new XmlTextReader(@"D:\myfile.xml");
while (reader.Read())
{
if (reader.Name == "brand")
{
XmlReader inner = reader.ReadSubtree();
while (inner.Read()) ;
if (reader.Name == "driver")
{
string drvNames = reader.GetAttribute("name");
}
}
}
var xdoc = XDocument.Load(@"D:\myfile.xml");
var query = from t in xdoc.Descendants("transport")
select String.Join(" - ", t.Elements("driver")
.Select(e => (string)e.Attribute("name")));
XmlTextReader reader = new XmlTextReader(@"D:\myfile.xml");
List<string> result = new List<string>();
while (reader.Read())
{
if (reader.Name == "brand")
{
XmlReader inner = reader.ReadSubtree();
List<string> names = new List<string>();
while (inner.Read())
{
if (reader.Name == "driver")
names.Add(reader.GetAttribute("name"));
}
if (names.Any())
result.Add(String.Join(" - ", names));
}
}
using System;
using System.Linq;
using System.Xml.Linq;
class Program
{
static void Main(string[] args)
{
string xml = @"<root>
<brand name = 'ford'>
<transport category='car'>
<driver name='John, Doe'/>
<driver name='Jane, Doe'/>
</transport>
</brand>
<brand name = 'opel'>
<transport category='car'>
<driver name='Jerry, Smith'/>
<driver name='Jeff, Perry'/>
</transport>
</brand></root>";
XDocument doc = XDocument.Parse(xml);
var transports = from t in doc.Root.Elements()
select new
{
Category = t.Attribute("name").Value.Trim(),
Drivers = t.Element("transport")
.Elements()
.Select(x => new { Name = x.Attribute("name").Value.Trim() })
};
foreach (var t in transports)
{
Console.WriteLine(t.Category);
foreach (var driver in t.Drivers)
Console.WriteLine(driver.Name.PadLeft(15));
}
Console.ReadKey(true);
}
}