我想在同一个文件中复制xml节点但是我收到了错误。 请检查。
PowerShell脚本:
$path=".."
cd $path
[xml]$xdoc = Get-Content $path
$NodeToClone = $xdoc.root.Version.Version.Builds.Build.Clone()
$xdoc.DocumentElement.AppendChild($NodeToClone)
$xdoc.Save($path)
XML文件:
<root>
<Versions>
<Version Number="3">
<Builds>
<Build Number="205" Version="30">
<Steps>
<Step Number="1" Build="205" Version="3">
<SubSteps>
<SubStep Number="1" comment="" />
</SubSteps>
</Step>
<Step Number="2" Build="205" Version="3">
<SubSteps>
<SubStep Number="1" Path="" File="" Action="" CSV_Type="" cq_number="" continue_on_error="" comment="" />
<SubStep Number="2" Path="" File="" Action="" CSV_Type="" cq_number="" continue_on_error="" comment="" />
</SubSteps>
</Step>
<Step Number="3" Build="205" Version="3">
<SubSteps>
<SubStep Number="1" comment="" />
</SubSteps>
</Step>
</Steps>
</Build>
</Builds>
</Version>
</Versions>
</root>
我想复制下一个数字206的构建节点,但我收到以下错误:
您无法在空值表达式上调用方法。 在D:\ Powershell-MyScripts \ test.ps1:6 char:48 + $ NodeToClone = $ xdoc.root.Version.Version.Clone&lt;&lt;&lt;&lt; () + CategoryInfo:InvalidOperation :( Clone:String)[],RuntimeException + FullyQualifiedErrorId:InvokeMethodOnNull
使用“1”参数调用“AppendChild”的异常:“对象引用未设置为对象的实例。” 在D:\ Powershell-MyScripts \ test.ps1:7 char:34 + $ xdoc.DocumentElement.AppendChild&lt;&lt;&lt;&lt; ($ NodeToClone) + CategoryInfo:NotSpecified:(:) [],MethodInvocationException + FullyQualifiedErrorId:DotNetMethodException
答案 0 :(得分:1)
你忘记了&#39;在您的XML路径中(... Version.Version ...而不是...... Versions.Version ...)
$NodeToClone = $xdoc.root.Versions.Version.Builds.Build.Clone()
此外,您可能希望更改节点以将克隆节点附加到
$xdoc.root.Versions.Version.Builds.AppendChild($NodeToClone)
否则它与您之前的节点不在同一级别。
在评论中讨论后更新:
[xml]$xdoc = Get-Content $path
$NodeToClone = @($xdoc.root.Versions.Version.Builds.Build)[-1].Clone()
$NodeToClone.Number = ([int]($NodeToClone.Number) + 1).ToString()
foreach ($step in $NodeToClone.Steps.Step) {
$step.Build = $NodeToClone.Number
}
$xdoc.root.Versions.Version.Builds.AppendChild($NodeToClone)
$xdoc.Save($path)