C# 节点在XML文档中具有的最大属性数
我们感兴趣的是在XML文档中查找节点具有的最大属性数。我的代码如下所示,使用C:C# 节点在XML文档中具有的最大属性数,c#,xml,max,C#,Xml,Max,我们感兴趣的是在XML文档中查找节点具有的最大属性数。我的代码如下所示,使用C: XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(@"C:\ABC.xml"); XmlNode root = xmlDoc.DocumentElement; int nodeAttrCount = 0; foreach (XmlNode node in root)
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"C:\ABC.xml");
XmlNode root = xmlDoc.DocumentElement;
int nodeAttrCount = 0;
foreach (XmlNode node in root)
if (nodeAttrCount < node.Attributes.Count)
nodeAttrCount = node.Attributes.Count;
我们感兴趣的是:我们还有比这更好的吗。就像任何给我们相同结果或任何其他选项的方法或属性一样。这是三行代码,用于满足相当小的需求。我不希望.NET框架中已经存在这种情况
你的foreach循环看起来不错。是否确定只查看根元素,而不在文档中递归?也可以使用LINQ to XML:
XElement el = XElement.Load("MyXML.xml");
int maxAttr = el.DescendantNodesAndSelf().OfType<XElement>().Max(x => x.Attributes().Count());
上面的代码也遍历它与嵌套节点一起工作的所有xml节点,并获得最大数量的属性
对于.net 2.0:
XmlDocument doc = new XmlDocument();
doc.Load("MyXML.xml");
int max = 0;
foreach (XmlNode xmlNode in doc.SelectNodes("//*"))
if (max < node.Attributes.Count)
max = node.Attributes.Count;
这与您的解决方案基本相同;
主要区别在于它使用XPath导航考虑每个嵌套级别上的所有节点。我们不需要在文档中递归。事实上,我们的XML是这样的:。听起来还可以吗?[插入关于使用LINQ with.Maxn=>n.Attributes.Count的注释][插入回复注释,说明LINQ是过度杀伤力]感谢您提供的代码,但不起作用。将错误“>”作为无效表达式提供。没有认识到Maxx=>x.Attributes.Count.Mmh真的很奇怪,我刚刚测试了相同的代码,它运行良好,我的目标是.NET3.5。你有使用系统吗;在您的类标题中?谢谢,但我们的生产服务器仍在运行.Net 2.0:好的,因为您选择我的作为接受答案,我添加了一个与.Net 2.0兼容的解决方案;谢谢虽然蒂姆帮了我很多忙,但我一直在寻找一个新的解决方案。我知道,随着手动循环/遍历时代的结束,一定有一些最新的解决方案。再次感谢。