我需要计算 XML 流中根元素正下方的节点数。我不关心任何子节点。
例如,对于以下 XML,它应该返回 4:
<?xml version="1.0" encoding="utf-8"?>
<root>
<node1>
<subnode1_1>
<subnode_1_1_1>
<subnode_1_1_1_1>…</subnode_1_1_1_1>
</subnode_1_1_1>
<subnode_1_1_2>…</subnode_1_1_2>
</subnode1_1>
</node1>
<node2 />
<node3>
<subnode3_1>…</subnode3_1>
<subnode3_2>…</subnode3_2>
<subnode3_3>…</subnode3_3>
</node3>
<node4>…</node4>
</root>
在 C# 中执行此操作的最有效(我关心执行时间)方法是什么?假设我将 XML 正文作为 Stream
。
最佳答案
您可以使用 Linq To XML 在一行中将其删除:
var count = XDocument.Load(stream).Root.Elements.Count();
//count = 4
就效率而言,在给出的两个答案之间,我的结果是:
var sw = Stopwatch.StartNew();
XmlDocument xml = new XmlDocument();
xml.Load(stream);
int i = xml.LastChild.ChildNodes.Count;
sw.Stop();
//971 ticks
和
var sw = Stopwatch.StartNew();
var count = XDocument.Load(stream).Root.Elements().Count();
sw.Stop();
//860 ticks
除非您进行多次迭代,否则实际上差异可以忽略不计
关于c# - 直接读取根元素下的 XML 节点数的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30196692/