gpt4 book ai didi

xml - 使用 PowerShell 更改 XML 元素值

转载 作者:数据小太阳 更新时间:2023-10-29 01:48:59 25 4
gpt4 key购买 nike

我只是在 StackOverflow 上找到有关如何更改 XML 元素的属性值的资料。

但是我们如何使用 PowerShell 更改元素本身的值呢?

我目前有:

XML

<Task>
<Settings>
...
</Settings>
<Actions Context="Author">
<Exec>
<Command>blablabla</Command>
<Arguments>CHANGETHISVALUE</Arguments>
</Exec>
</Actions>
</Task>

脚本

$filePathToTask = C:\Task.xml
$xml = New-Object XML
$xml.Load($filePathToTask)
$element = $xml.SelectSingleNode("//Arguments")
$element.InnerText("newtext")
$xml.Save($filePathToTask)

但是,我似乎无法对最后一个变量使用方法。我做错了什么?

编辑

  • 添加代码

我得到的错误是你不能在空值表达式上调用方法

我觉得我的问题在于:

$ElementToChange =  $xml.SelectSingleNode("//Arguments")

它保持为空,但我已经尝试过像 .SelectNodes 这样的方法并尝试使用 //Arguments 标签但仍然没有成功

最佳答案

InnerText 是一个属性,而不是一个方法。它是这样使用的:

$element.InnerText = "newtext"

此外,我怀疑您的原始数据(与您发布的 XML 样本不同)使用了命名空间。 AFAICS 这是 $xml.SelectSingleNode('//Arguments') 返回空结果的唯一可能原因。 从 Windows 任务计划程序导出的 XML 文件肯定是命名空间的:

<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task‌​">
<!-- ... -->
</Task>

命名空间与其他节点属性不同,它不仅影响节点本身,还影响其子节点。要从带有命名空间的 XML 中选择节点,您需要 namespace manager :

$nsm = New-Object Xml.XmlNamespaceManager($xml.NameTable)
$nsm.AddNamespace('ns', $xml.DocumentElement.NamespaceURI)
$element = $xml.SelectSingleNode('//ns:Arguments', $nsm)

关于xml - 使用 PowerShell 更改 XML 元素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42699869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com