【发布时间】:2013-08-15 21:18:09
【问题描述】:
我在 VB.NET 中有一个很大的 XMLNode(我们说的是 10s/100s 的数千个节点和数百万个属性)。
XML 的一般结构是:
<other xml nodes></other xml nodes>
<list>
<item attr1="" attr2="" attr3="" attr4="" ... />
<item attr1="" attr2="" attr3="" attr4="" ... />
<item attr1="" attr2="" attr3="" attr4="" ... />
<item attr1="" attr2="" attr3="" attr4="" ... />
<item attr1="" attr2="" attr3="" attr4="" ... />
<item attr1="" attr2="" attr3="" attr4="" ... />
.
.
.
</list>
我想要做的是根据某些属性删除项目节点(例如,如果我有 50,000 个节点,我的标准可能会删除其中的 49500 个)。
我的问题是,我的代码需要几秒钟才能删除这么多的节点,我需要它更快。
我尝试了几种不同的方法,我迄今为止最快的是:
dim xnlList = xnBigXMLNode.selectNodes("//list/item[@attr1=sample]")
for each xnNode in xnlList
xnNode.ParentNode.RemoveChild(xnNode)
next
*请原谅以上代码中的任何错误,我现在不在我的开发机器上
作为一个附加的约束,我需要在 xmlNode 中保留“其他 xml 节点”。
我考虑过删除整个列表,然后重新添加我需要的节点,但这需要更长的时间才能执行。
有人能想出一种方法来更快地删除数千个节点吗?
提前致谢
【问题讨论】:
-
听起来像一个非常大的文件。考虑 NTFS 分配不是连续的,并且 HDD 的平均随机读取速度小于 5MB/s。硬盘可能是你的瓶颈,而不是你的代码。
-
@GiulioFranco 我实际上是从 web 服务获取 XML,但是单步执行代码,很明显有一些瓶颈 - 一个是从 web 服务获取 xml,另一个是删除如此大量的节点。感谢您的建议。
-
看看你是怎么写示例结构的,xml的结构似乎很简单。即使这很难维护,您是否考虑过在明文上使用明文/正则表达式匹配?