gpt4 book ai didi

c# - 在不知道确切结构的情况下计算大量嵌套的 XmlNodes

转载 作者:太空宇宙 更新时间:2023-11-03 21:20:32 26 4
gpt4 key购买 nike

我正在尝试对用户上传的表单中的字段进行计数。此“表单”作为 XML 文档出现。一切正常,但我遇到了一个问题,我需要计算表单中的所有字段,而我当前的代码只计算组和下面的一个级别。我需要我的代码进入这些组并计算字段。如果这些组有组,也计算它们(并继续......)。我什至不知道嵌套组的数量是多少,因为设计此表单完全取决于最终用户。此表单可以有数千个字段,因此结构可以是任何内容。

所以,简而言之,我知道将提供以下 XML:

<theFieldRoot>
<group1>
<field1></field1>
</group1>
<group2>
<field2></field2>
<group3>
<field3></field3>
</group3>
</group2>
</theFieldRoot>

预期结果为 6

所以,我的问题是,我有一个xml文档,我想统计根节点下的所有嵌套节点<theFieldRoot> ,但是在这个根节点之后,我不知道它是如何构成的。我只知道会有组和字段。如何计算 theFieldRoot 下的每个元素什么时候结构未知?

C#:

    private int FieldCount(XmlDocument xmlDoc)
{
int fields = 0;
XmlNode formSchema = xmlDoc.SelectSingleNode("Blah/Blah2");
XmlDocument fieldXml = new XmlDocument();

using (var sr = new StringReader("<theFieldRoot>" + formSchema.InnerText + "</theFieldRoot>"))
using (var xtr = new XmlTextReader(sr) { Namespaces = false })
{
fieldXml.Load(xtr);
XmlNode myFields = fieldXml.FirstChild;

foreach (XmlElement xEl in myFields)
{
if (xEl.HasChildNodes)
{
fields += 1;
}
fields += 1;
}
//if (myFields.HasChildNodes)
//{
// fields = myFields.ChildNodes.Count;
//}

}

最佳答案

您可以使用 XPath .//* 来选择所有元素,无论它的名称是什么,无论它在当前元素下的任何位置。然后你可以很容易地计算它们,例如:

int fields = formSchema.SelectNodes(".//*").Count;

工作示例:

var xml = @"<theFieldRoot>
<group1>
<field1></field1>
</group1>
<group2>
<field2></field2>
<group3>
<field3></field3>
</group3>
</group2>
</theFieldRoot>";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);
XmlNode formSchema = xmlDoc.DocumentElement;
int fields = formSchema.SelectNodes(".//*").Count;
Console.WriteLine(fields);
//output is : 6

.NET Fiddle Demo

关于c# - 在不知道确切结构的情况下计算大量嵌套的 XmlNodes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31084755/

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