首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取.xml-file时出现死循环

读取.xml-file时出现死循环
EN

Stack Overflow用户
提问于 2019-06-12 14:59:56
回答 2查看 70关注 0票数 1

我创建了一个PowerShell脚本,用于在.xml文件中读取和写入infos/设置。

代码语言:javascript
复制
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。

我还以为

代码语言:javascript
复制
$xmlDoc.settings.ChildNodes | %{$settings[$_.name] = $_.firstChild.Value}

可能是原因,但我不知道怎么解决。写入xml文件完全可以正常工作。有人能帮上忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-12 15:10:54

我认为readSettings函数在没有测试的情况下调用自己,我认为这足以循环。

代码语言:javascript
复制
function readSettings([string]$xmlfile, [string]$setting)
{
    $s = readSettings $xmlfile
    $v = $s[$setting]
    Write-Host $v
}
票数 2
EN

Stack Overflow用户

发布于 2019-06-12 15:24:30

我是零售商..。我调用了错误的函数...

应该是$s = exportSettings $xmlfile

抱歉,各位浪费了你们的时间:)

少了一个问题。

谢谢你们!

如果您需要:

代码语言:javascript
复制
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)
}

它现在可以工作了:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56556327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档