递归遍历xml树并将元素值推送到自定义类

时间:2011-10-18 06:54:00

标签: c# xml linq recursion traversal

Whitin a“units”元素可以是许多“unit”元素,它们同样具有“units”元素。

我想将每个单元的unitName写入一个自定义类,其中prop的UnitName和前一个/父单元的unitName进入propUnitName。

我也不确定递归方法应该返回什么类型的数据...最好是具有平面列表的List。

你会怎么做?

<units>
  <unit>
    <unitName>Test05</unitName>    
    <units>
      <unit>
        <unitName>Test03</unitName>        
        <units>
          <unit>
            <unitName>Test04</unitName>           
            <units>
              <unit>
                <unitName>Test07</unitName>                
                <units>
                  <unit>
                    <unitName>Test01</unitName>                    
                  </unit>
                </units>
              </unit>
            </units>
          </unit>
        </units>
      </unit>
    </units>
  </unit>
</units>

2 个答案:

答案 0 :(得分:1)

我更希望以这种方式写课:

[Serializable]
[XmlRoot("unit")]
public class Unit
{
    [XmlArray("units")]
    [XmlArrayItem("unit")]
    public Unit[] Units { get; set; }

    [XmlElement("unitName")]
    public string Name { get; set; }
}

然后使用XmlSerializer对其进行序列化/反序列化。

答案 1 :(得分:0)

查看XDocument class

它有多种方法可以帮助您轻松解析Xml。在你的情况下,它看起来像:

var xdoc = new XDocument(xmlString);
foreach(XElement node in xdoc.Descendants("unitName"))
{
  AddToList(node.value);
}

这将遍历xml文档中的所有unitName元素,您可以随意使用它们。

编辑:将xdoc.Descendants更改为xdoc.Elements,因此它现在以递归方式工作并产生预期结果。