c# - 解析 xml 并连接多个子节点的结果

标签 c# xml xml-parsing

我需要解析一个 xml 文件,并需要加入节点“驱动程序”的结果。
每个“品牌”节点都是唯一的。

示例 xml 文件:

<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>


预期结果:

John, Doe - Jane, Doe
Jerry, Smith - Jeff, Perry


到目前为止我的代码:

    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");
                }   
            }
    }


我无法获得“驱动程序”的结果。
一个或多个“驱动程序”节点。
语言 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));
    }
}

关于c# - 解析 xml 并连接多个子节点的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14200817/

相关文章:

c# - 无法弄清楚如何使用以下方法计算非复合税和混合税?

c++ - 在使用 Xerces C++ 进行 XML 解析期间集成模式元数据

bash - 意外 token (带有xmlstarlet

python - xml 批量文件编辑器按数字递增

xml - 不允许在 DTD 和 XSD 模式中进行非确定性元素声明的原因是什么?

java - 在 mac os 上配置 hadoop namenode 时出现 yarn-site.xml 错误

c# - 对 BlockingCollection 进行排序/排序

c# - 登录 Microsoft AD 后 Request.IsAuthenticated 始终为 false

c# - 如何在 C++ 中读取 IL

java - 在 Android 中使用 SAXParser 解析 XML 时出现空字符串结果