【发布时间】:2020-08-05 09:21:54
【问题描述】:
我目前正在尝试从一个巨大的 XML 文件中删除大量数据。我目前正在使用 Powershell 来尝试这样做,我想知道它是否可以在可接受的时间内完成。此文件包含 2.5m 条记录,我想删除属性 = 'COMPANY' 的所有记录。这是我当前的代码:
$xml = [xml]''
$xml.Load("C:\New folder\untrimmed.xml")
$node = $xml.SelectSingleNode("//record[@category='COMPANY']")
while ($node -ne $null) {
$node.ParentNode.RemoveChild($node)
$node = $xml.SelectSingleNode("//record[@category='COMPANY']")
$xml.save("C:\New folder\trimmed.xml")
在一个半小时后完成此操作后,修剪后的文件比原始文件大。我怎样才能以更好的方式做到这一点? powershell 不适合这里的工作吗?
【问题讨论】:
-
剪裁后的文件是否使用 UTF-16 编码?
-
While循环未关闭。您能否提供minimal reproducible example 和XML示例? -
我建议使用 System.Xml.XmlReader 和 XmlWriter 以及读取的元素并将它们流出来,除了您要过滤的元素。如果我没记错的话 [xml] 会读取内存中的整个文件。请参阅此 SO 以了解如何操作:stackoverflow.com/questions/48102318/…
-
@vonPryz 它的 UTF-8
标签: .net xml windows powershell