【问题标题】:Updating Text In XML File [duplicate]更新 XML 文件中的文本 [重复]
【发布时间】:2020-02-29 02:13:16
【问题描述】:

我有以下 xml 文件。

<Objects>
  <Object>
    <Property Name="Browser">Firefox</Property>
    <Property Name="PDF">Adobe Reader</Property>
</Object>

我希望能够使用 powershell 脚本更新 firefox 这个词。

这是正在工作和不工作的 powershell 脚本。

$xmlDoc = [XML](Get-Content "c:\Windows\personalsettings\PersonalSettings.xml")
 foreach ($item in  $xmlDoc.Objects.Object.Property)
 {
    $item.Name = 'Chrome'
 }
 $xmlDoc.Save("c:\Windows\personalsettings\PersonalSettings.xml")

【问题讨论】:

  • 你能提供一个使用我的数据的例子吗?

标签: powershell


【解决方案1】:
[xml]$XML = @"
<Objects>
  <Object>
    <Property Name="Browser">Firefox</Property>
    <Property Name="PDF">Adobe Reader</Property>
  </Object>
</Objects>
"@

$XML.SelectSingleNode('//Property[@Name="Browser"]')
$XML.SelectSingleNode('//Property[@Name="Browser"]').InnerText = "TEST"
$XML.SelectSingleNode('//Property[@Name="Browser"]')

结果将是

> Name    #text  
> ----    ----- 
> Browser Firefox
> Browser TEST

您正在寻找的是 XPATH

像这样工作

//路径或节点名[@AttributeName="属性值"]

获得节点后,您可以按照您认为合适的方式编辑该节点。

【讨论】:

  • 感谢您的示例。但是,在运行您的代码时,将 word browser 替换为新文本,而不是替换 word browser 之后的值。
  • 不,不是。在我的示例中,它不可能更改单词浏览器。确保您正在更改 InnerText
  • $xmlDoc = [XML](Get-Content "c:\Windows\personalsettings\PersonalSettings.xml") $XML.SelectSingleNode('//Property[@Name="Browser"]') .InnerText = "TEST" $xmlDoc.Save("c:\Windows\personalsettings\PersonalSettings.xml") 您不能在空值表达式上调用方法。在 line:3 char:1 + $XML.SelectSingleNode('//Property[@Name="Browser"]').InnerText = "TES ... + ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull
  • 如果你看一下你给出的例子......你并没有真正的 XML。您忘记以&lt;/Objects&gt; 结束示例,这意味着没有//Property[@Name="Browser"],因为您还没有完成XML。
  • 同样,这里是 xml 文件: FirefoxAdobe Reader
猜你喜欢
  • 2013-01-11
  • 1970-01-01
  • 1970-01-01
  • 2015-04-16
  • 1970-01-01
  • 2021-10-10
  • 2014-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多