将所有xml节点保存到db而不循环遍历它

发布于 2024-10-11 10:05:08 字数 599 浏览 1 评论 0原文

我有这个 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 个“记录”节点。这太长了......

有没有办法保存所有这些节点而不循环遍历它?

谢谢!!

I have this 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>

And I'm using the code below to get all "Record" nodes:

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

And, after that, I save each record to database. But, the problem is that I'm using a foreach to loop through this nodes and the count of this nodes may be more than 500, sometimes it gets up to 1000 "Records" node. And this gets too long...

Is there a way to save all of these nodes without looping through it?

Thanks!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

怎樣才叫好 2024-10-18 10:05:08

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

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

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

您甚至还有另一个更简洁、高效的解决方案:XSLT。

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

Maybe you can iterate with your current for-each, but my suggestion is don't save the data to a record per each iteration.

First create the insert statements, then batch execute all inserts in a single trip. This is more efficient.

In the other hand, maybe you're using some OR/M. If this is your situation, and your choice is NHibernate, it supports batching commands.

You've even another cleaner, and efficient solution: XSLT.

Convert your XML to SQL with a very simple XSLT instead of iterating nodes from C#. Parsing your XML to SQL with that XSLT is the fastest and best solution, and you can send the data in a single trip too.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文