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

Ser*_*ilo 30 powershell xml

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

  • 修改 XML 文件中的值或如果它们不存在则创建它们(即我需要搜索该项目,如果不存在则创建并修改值)
  • 在同一个 XML 文件中处理不同的 XML 语法,就像那些:

语法 1:

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

语法 2:

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

语法 3:

<设置>
    <皮肤设置>
        <setting type="bool" name="skin.confluence.HomepageHideRecentlyAddedVideo">false</setting>
    </皮肤设置>
</设置>

任何帮助将不胜感激。

谢谢。

Ƭᴇc*_*007 40

PowerShell 完全支持处理 XML 文件。

例如,如果我们采用您提供的第一个简介并将其粘贴到名为settings.xml“C:\blah”文件夹中的 XML 文件中,您可以获得每个设置的 ID,如下所示:

[xml]$myXML = Get-Content C:\blah\settings.xml
$myXML.settings.setting.id
Run Code Online (Sandbox Code Playgroud)

返回:

Location2
Location2id
Run Code Online (Sandbox Code Playgroud)

$myXML.settings.setting.value
Run Code Online (Sandbox Code Playgroud)

返回:

Barcelona, Spain
zmw:00000.1.08181
Run Code Online (Sandbox Code Playgroud)

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

[xml]$myXML = Get-Content C:\blah\settings.xml
$myXML.settings.musicplayer.crossfade
Run Code Online (Sandbox Code Playgroud)

返回:

0
Run Code Online (Sandbox Code Playgroud)

要读取crossfade,请将其更改(更改为 2),然后保存:

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

评论后编辑:

更改 XML 元素本身(如巴塞罗那示例中的那样)有点棘手,因为您正在编辑 XML 结构本身,而不是它包含的数据。

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

对于 Skinsettings 示例,请尝试以下操作:

$myXML.settings.skinsettings.setting."#text" = "true"
Run Code Online (Sandbox Code Playgroud)

查看这些资源: