递归遍历xml树并将元素值压入自定义类
本文关键字:自定义 元素 遍历 xml 递归 | 更新日期: 2023-09-27 18:11:27
在一个"units"元素中可以有多个"unit"元素,这些"unit"元素又有一个"units"元素。
我想把每个单元的unitName写进一个自定义类,用prop unitName和前一个/父单元的unitName写进prop ParentUnitName。
我也不确定递归方法应该返回什么类型的数据…最好是一个具有平坦列表的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>
我更喜欢这样写一个类:
[Serializable]
[XmlRoot("unit")]
public class Unit
{
[XmlArray("units")]
[XmlArrayItem("unit")]
public Unit[] Units { get; set; }
[XmlElement("unitName")]
public string Name { get; set; }
}
,然后用XmlSerializer序列化/反序列化。
看一下XDocument类。
它有多种方法可以帮助您轻松解析Xml。在您的例子中,它看起来像:
var xdoc = new XDocument(xmlString);
foreach(XElement node in xdoc.Descendants("unitName"))
{
AddToList(node.value);
}
这将遍历xml文档中的所有unitName
元素,您可以对它们做任何您想做的事情。
编辑:更改xdoc。xdoc的后代。元素,所以它现在递归地工作并产生预期的结果。