【问题标题】:C# Parse XML with repeated pattern of nodesC# 使用重复的节点模式解析 XML
【发布时间】:2017-03-30 08:55:38
【问题描述】:

您好,我有以下 xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<Resources>
    <Category Cause="ONE">
        <Resource Component="AAA" Name="cBackgroundTextA" />
        <Resource Component="BBB" Name="cBackgroundTextB" />
        <Resource Component="CCC" Name="cBackgroundTextC" />
    </Category>
    <Category Cause="TWO">
        <Resource Component="DDD" Name="cBackgroundTextD" />
        <Resource Component="EEE" Name="cBackgroundTextE" />
        <Resource Component="FFF" Name="cBackgroundTextF" />
    </Category>
    <Category Cause="THREE">
        <Resource Component="GGG" Name="cBackgroundTextG" />
        <Resource Component="HHH" Name="cBackgroundTextH" />
        <Resource Component="III" Name="cBackgroundTextI" />
    </Category>
</Resources>

我怎样才能得到以下信息:

ONE , AAA , cBackgroundTextA

ONE , BBB , cBackgroundTextB

ONE , CCC , cBackgroundTextC

二、DDD、cBackgroundTextD

两个,EEE,cBackgroundTextE

...

【问题讨论】:

    标签: c# xml linq


    【解决方案1】:

    尝试一下:

    XElement root;
    
    foreach(var folder in root.Children()) { //For each folder
        var folderType = folder.Attribute("type").Value;
        foreach(var file in folder.Children()) { //For each  file
    
            Console.WriteLine($"{folderType} AND {file}");
        }
    }
    

    【讨论】:

      【解决方案2】:

      我终于设法通过以下方式获取值:

      xmlDocument = new XDocument();
      xmlDocument = XDocument.Load(filePath, LoadOptions.None);
      
      var categoryNodeList = XmlDocument.Descendants("Category");
      
          foreach (XElement categoryItem in categoryNodeList)
          {
              foreach (XElement resourceItem in categoryItem.Elements())
              {
                  var XmlObject = new ResultDetail
                  {
                      Cause = categoryItem.Attribute("Cause").Value,
                      Component = resourceItem.Attribute("Component").Value,
                      Name = resourceItem.Attribute("Name").Value
                  };
              }
          }
      

      【讨论】:

        【解决方案3】:

        可以使用单个 LINQ 查询收集所有必需的信息:

        var query = from cat in XmlDocument.Descendants("Category");
                    from res in cat.Elements()
                    select new ResultDetail
                            {
                                Cause = cat.Attribute("Cause").Value,
                                Component = res.Attribute("Component").Value,
                                Name = res.Attribute("Name").Value
                            };
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-05-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-28
          • 1970-01-01
          相关资源
          最近更新 更多