2011-01-11 53 views
0

循环我有这样的XML:保存所有的XML节点数据库,而无需通过它

<Path> 
    <Record> 
    <ID>6534808</ID> 
    <Distance>1.05553036073736</Distance> 
    </Record> 
    <Record> 
    <ID>6542471</ID> 
    <Distance>1.05553036073736</Distance> 
    </Record> 
    ... and about more 500 nodes 
</Path> 

而且我用下面的代码来获取所有“记录”节点:

XmlNodeList paths = xDoc.SelectNodes("//Record"); 

而且,之后,我将每条记录保存到数据库。但是,问题在于我使用foreach循环遍历这些节点,并且此节点的数量可能超过500个,有时会达到1000个“记录”节点。这太长了...

有没有办法保存所有这些节点没有循环通过它?

谢谢!

+0

XmlNodeList是.NET框架的DOM实现中的一个类,而不是LINQ to XML实现,所以我不确定为什么您将问题标记为LINQ to XML。如果您使用LINQ to XML并希望高效地拉入长文档,请参阅http://msdn.microsoft.com/en-us/library/bb387008%28v=VS.90%29.aspx。 – 2011-01-11 15:07:18

回答

0

也许你可以迭代当前的for-each,但我的建议是不要将数据保存到每次迭代的记录。

首先创建插入语句,然后在单次旅程中批量执行所有插入。这样更有效率。

另一方面,也许你正在使用一些OR/M。如果这是你的情况,并且你的选择是NHibernate,它支持批处理命令。

你甚至还有一个更清洁,高效的解决方案:XSLT。

用一个非常简单的XSLT将您的XML转换为SQL,而不是从C#中迭代节点。使用该XSLT将XML解析为SQL是最快最好的解决方案,您也可以在单次旅行中发送数据。