我创建了一个PowerShell脚本,用于在.xml文件中读取和写入infos/设置。
Param(
[string]$mode,
[string]$set,
[string]$xml
)
function readSettings([string]$xmlfile, [string]$setting)
{
$s = readSettings $xmlfile
$v = $s[$setting]
Write-Host $v
}
function exportSettings([string]$xmlfile)
{
$xmlDoc = New-Object XML
$xmlDoc.Load($xmlfile)
$settings = @{}
$xmlDoc.settings.ChildNodes | %{$settings[$_.name] = $_.firstChild.Value}
return $settings
}
function importSettings([hashtable]$ht,[string]$xmlFile){
$xmlDoc = New-Object XML
$xmlDoc.Load($xmlFile)
foreach ($key in $ht.keys){
$settingNode = $xmlDoc.SelectSingleNode("/settings/setting[@name='$key']")
if ($settingNode){
$settingNode.firstChild.Value = $ht[$key]
}else{
$newNode = $xmlDoc.settings.setting[0].Clone()
$newNode.name = $key
$newNode.firstChild.Value = $ht[$key]
$xmlDoc.settings.appendChild($newNode)
}
}
$xmlDoc.Save($xmlFile)
}
if($mode -eq "read")
{
readSettings($xml, $set)
}
if ($mode -eq "write")
{
}(也是在GitHub上。)
每当我读取.xml文件时,它都会产生一个无限循环,内存消耗高达2 2GB。
我还以为
$xmlDoc.settings.ChildNodes | %{$settings[$_.name] = $_.firstChild.Value}可能是原因,但我不知道怎么解决。写入xml文件完全可以正常工作。有人能帮上忙吗?
发布于 2019-06-12 15:10:54
我认为readSettings函数在没有测试的情况下调用自己,我认为这足以循环。
function readSettings([string]$xmlfile, [string]$setting)
{
$s = readSettings $xmlfile
$v = $s[$setting]
Write-Host $v
}发布于 2019-06-12 15:24:30
我是零售商..。我调用了错误的函数...
应该是$s = exportSettings $xmlfile
抱歉,各位浪费了你们的时间:)
少了一个问题。
谢谢你们!
如果您需要:
function xml_readSettings([string]$xmlfile, [string]$setting)
{
$xmlDoc = New-Object XML
$xmlDoc.Load($xmlfile)
$settings = @{}
$xmlDoc.settings.ChildNodes | %{$settings[$_.name] = $_.firstChild.Value}
return $settings[$setting]
}
function xml_exportHashtable([string]$xmlfile)
{
$xmlDoc = New-Object XML
$xmlDoc.Load($xmlfile)
$settings = @{}
$xmlDoc.settings.ChildNodes | %{$settings[$_.name] = $_.firstChild.Value}
return $settings
}
function xml_writeSettings([hashtable]$ht, [string]$xmlfile)
{
$xmlDoc = New-Object XML
$xmlDoc.Load($xmlFile)
foreach ($key in $ht.keys){
$settingNode = $xmlDoc.SelectSingleNode("/settings/setting[@name='$key']")
if ($settingNode){
$settingNode.firstChild.Value = $ht[$key]
}else{
$newNode = $xmlDoc.settings.setting[0].Clone()
$newNode.name = $key
$newNode.firstChild.Value = $ht[$key]
$xmlDoc.settings.appendChild($newNode)
}
}
$xmlDoc.Save($xmlFile)
}它现在可以工作了:)
https://stackoverflow.com/questions/56556327
复制相似问题