将来我将阅读200,000个xml文件,并从每个文件中捕获一些信息。我需要找到一种尽快获得的方法......
我的XML:
/
我想获得<note>
<fields>
<name>john</name>
<lastname>doe</lastname>
</fields>
<info>
<chNFe>VALUE</chNFe>
</info>
</note>
节点的值
chNFe
是否有更有效的方法使用LINQ读取XML字段?
答案 0 :(得分:2)
通过XName
搜索后代节点会稍微快一些:
var chave = doc.Descendants("chNFe").First().Value;
更新:直接抓取元素的速度要快一点:
var chave = doc.Root.Element("info").Element("chNFe").Value;
但是,您的程序花费的绝大部分时间都是从磁盘读取并解析XML文档,因此只要您使用LINQ to XML,就可能不会获得明显的收益。 / p>
Here's我的基准代码。以下是结果:
答案 1 :(得分:0)
你所拥有的是相当快的,但明确地向下钻取树似乎更快。
var doc = XDocument.Parse(xml);
var chave = doc.Root.Element("info").Element("chNFe").Value;
使用XPath查询可能是一种维持相同性能但简化代码的方法:
var doc = XDocument.Parse(xml);
var chave = doc.XPathSelectElement("/note/info/chNFe").Value;
此外,您可能不必单独阅读文件内容而不解析文件内容;使用XDocument.Load
提供文件的路径并让它进行读取。
我的测试结果(每次测试1,000,000次,平均时间):
1. LINQ -> Descendants() = 0.000019ms
2. XPath = 0.000024ms
3. LINQ -> Element() = 0.000004ms