gpt4 book ai didi

C# 识别 XML 文件中的父子元素

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

这是我在网上找到的。

string xml = @"
<food>
<child>
<nested />
</child>
<child>
<other>
</other>
</child>
</food>
";

XmlReader rdr = XmlReader.Create(new System.IO.StringReader(xml));
while (rdr.Read())
{
if (rdr.NodeType == XmlNodeType.Element)
{
Console.WriteLine(rdr.LocalName);
}
}

上面的结果会是

food
child
nested
child
other

这很完美,我只需要确定哪些元素包含子元素。

例如,我需要这个输出

startParent_food
startParent_child
nested
endParent_child
startParent_child
other
endParent_child
endParent_food

最佳答案

您可以使用 XmlReader 来做到这一点,但这并不是特别容易。如果不继续进一步阅读,您将无法知道某个元素是否有子元素,因此您必须缓冲和跟踪各种内容(因为 XmlReader 是只向前的)。除非您有充分的理由使用如此低级的 API,否则我强烈建议您避免使用它。

这对于 LINQ to XML 来说相当简单

private static void Dump(XElement element, int level)
{
var space = new string(' ', level * 4);

if (element.HasElements)
{
Console.WriteLine("{0}startParent_{1}", space, element.Name);

foreach (var child in element.Elements())
{
Dump(child, level + 1);
}

Console.WriteLine("{0}endParent_{1}", space, element.Name);
}
else
{
Console.WriteLine("{0}{1}", space, element.Name);
}
}

如果正如您在评论中所暗示的那样,您的实际要求是修改某些值,那么您无需处理 XML 结构的详细信息即可执行此操作。例如,要修改 nested 元素的值:

var doc = XDocument.Parse(xml);

var target = doc.Descendants("nested").Single();

target.Value = "some text";

var result = doc.ToString();

参见 this fiddle两者的演示。

关于C# 识别 XML 文件中的父子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44971179/

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