gpt4 book ai didi

c# - 迭代 XML 节点

转载 作者:数据小太阳 更新时间:2023-10-29 03:02:49 26 4
gpt4 key购买 nike

我正在遍历一个包含 Gnome (/GnomeArmy/Gnome) 的 XML 节点列表,而我想遍历属于 gnome 的子节点列表。

目前我让它为两个 gnome 选择第一个 Gnome 的 child ,这是不正确的,因为他们都有自己的 child 。

即Gnome1 子级是 Jessica & Nick,Gnome2 子级也是 Jessica & Nick(这是错误的)。

谢谢。

代码:

public static List<Gnome> ReadGnomes(string file)
{
List<Gnome> gnomeList = new List<Gnome>();

XmlDocument gnomeFile = new XmlDocument();
gnomeFile.Load(file);

// Get list of Gnomes
XmlNodeList nodes = gnomeFile.SelectNodes(string.Format("/GnomeArmy/Gnome"));

Gnome gnome = null;
foreach (XmlNode node in nodes)
{
gnome = new Gnome();

// General Attributes
gnome.Name = node["Name"].InnerText;
gnome.Colour = node["Colour"].InnerText;

XmlNodeList children = node.SelectSingleNode("/GnomeArmy/Gnome/Children").ChildNodes;
foreach (XmlNode child in children)
{
if (child.Name == "Child")
{
gnome.Children = gnome.Children + " " + child.InnerText;
}
}
gnomeList.Add(gnome);
}
return gnomeList;
}

XML:

<GnomeArmy>

<Gnome>
<Name>Harry</Name>
<Colour>Blue</Colour>
<Children>
<Child>Jessica</Child>
<Child>Nick</Child>
</Children>
</Gnome>

<Gnome>
<Name>Mathew</Name>
<Colour>Red</Colour>
<Children>
<Child>Lisa</Child>
<Child>James</Child>
</Children>
</Gnome>

</GnomeArmy>

最佳答案

尝试使用 LINQ to XML

List<Gnome> gnomes = XDocument.Load("path")
.Descendants("Gnome")
.Select(g => new Gnome {
Name = (string)g.Element("Name"),
Colour = (string)g.Element("Colour"),
Childrens = g.Element("Children")
.Elements("Child")
.Select(x => new Children { Name = (string)x)).ToList());

我将 Children 存储到一个 List 中,你可以更改它,如果你只想连接 child 的名字,你可以使用 string.Join为此:

Childrens = string.Join(" ",g.Element("Children")
.Elements("Child")
.Select(x => (string)x));

关于c# - 迭代 XML 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21862655/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com