如何使用PowerShell在XML文件中修改/创建值?


24

我想知道是否可以使用PowerShell在XML文件中修改/创建值。基本上我对以下内容感兴趣:

  • 修改XML文件中的值,如果不存在则创建它们(即,我需要搜索项目,如果不存在则创建并修改值)
  • 在相同的XML文件中处理与这些文件不同的XML语法:

语法1:

<设置>
  <setting id =“ Location2” value =“西班牙巴塞罗那” />
  <setting id =“ Location2id” value =“ zmw:00000.1.08181” />
</ settings>

语法2:

<设置>
    <音乐播放器>
        <crossfade> 0 </ crossfade>
        <queuebydefault> false </ queuebydefault>
    </ musicplayer>
</ settings>

语法3:

<设置>
    <skinsettings>
        <setting type =“ bool” name =“ skin.confluence.HomepageHideRecentlyAddedVideo”>错误</ setting>
    </ skinsettings>
</ settings>

任何帮助将不胜感激。

谢谢。

Answers:


36

PowerShell完全支持处理XML文件。

例如,如果我们采用您提供的第一个Blur,然后将其粘贴到文件settings.xml夹“ C:\ blah”中命名的XML文件中,则可以这样获取每个设置的ID:

[xml]$myXML = Get-Content C:\blah\settings.xml
$myXML.settings.setting.id

哪个返回:

Location2
Location2id

$myXML.settings.setting.value

返回:

Barcelona, Spain
zmw:00000.1.08181

如果我们用语法2中提供的内容替换XML文件的内容:

[xml]$myXML = Get-Content C:\blah\settings.xml
$myXML.settings.musicplayer.crossfade

返回:

0

要阅读crossfade,将其更改(更改为2)并保存回去:

[xml]$myXML = Get-Content C:\blah\settings.xml
$myXML.settings.musicplayer.crossfade = 2
$myXML.Save("C:\blah\settings.xml")

评论后编辑:

更改XML元素本身(例如在Barcelona示例中)有点麻烦,因为您正在编辑XML结构本身,而不是其中包含的数据。

[xml]$myXML = Get-Content C:\blah\settings.xml
$myXML.settings.ChildNodes.Item(0).value = "New York, USA"
$myXML.Save("C:\blah\settings.xml")

对于“外观设置”示例,请尝试以下操作:

$myXML.settings.skinsettings.setting."#text" = "true"

查看以下资源:


感谢您的回答。我已经阅读了您的建议,并且尝试在从巴塞罗那到纽约的第一个Blob中更新id =“ Location2”的值,但没有成功。第三个Blob相同(试图更改为“ true”)。如何找到/修改这些值?
Serieofilo

我正在尝试使用以下命令选择要更改的节点,$MyXML.SelectSingleNode("/settings/skinsettings/setting[@type='bool' and @name='skin.confluence.HomepageHideRecentlyAddedVideo']")但是如何将值从“ false”更改为“ true”。或者,如果不存在该如何创建这样的节点?
Serieofilo

1
查看我的编辑。我添加了更多信息。:)
Ƭᴇcʜιᴇ007
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.