我有加載XML文檔的代碼,執行$xmlDoc.SelectNodes($XPath)
,然後foreach($node in $nodes)
將XML作爲字符串戳到表中。閱讀大型XML文檔以在Powershell中生成XML節點數組?
此代碼適用於CA的文件。 100KB有10條記錄。
但是,我有一個文件是ca. 100MB和約。 50k記錄和代碼只是掛在$xmlDoc =[xml](gc $xmlpath)
(並使用所有可用的系統內存)。沒有首先解析整個XML文檔,是否有更好的方法來生成我的數組$nodes
?
# Loads xml document
$xmlpath = $filepath
$xmlDoc =[xml](gc $xmlpath)
$nodes = $xmlDoc.SelectNodes('//root') #One element per record in SQL
...
$SqlQuery = @"
INSERT INTO {0} VALUES ({1})
"@
....
foreach($node in $nodes)
{
$StringWriter = New-Object System.IO.StringWriter
$XmlWriter = New-Object System.XMl.XmlTextWriter $StringWriter
$XmlWriter.Formatting = "None"
$XmlWriter.Flush()
$StringWriter.Flush()
$node.WriteTo($XmlWriter)
#data content (for this quote)
$Pxml = "`'"+$StringWriter.ToString()+"`'"
#Write to database
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = [string]::Format($sqlquery, $tableName, $Pxml)
$SqlCmd.Connection = $SqlConnection
$SqlCmd.ExecuteScalar()
}
XML文檔具有結構:
<xml>
<root>
...
</root>
<root>
...
</root>
</xml>
並將所得字符串形式:
<root>
...
</root>
這產生了所需的結果幾乎直接出罐。 – JustinJDavies 2013-03-08 16:31:10