我想知道是否可以使用 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> </音乐播放器> </settings>
语法 3:
<设置> <皮肤设置> <setting type="bool" name="skin.confluence.HomepageHideRecentlyAddedVideo">false</setting> </皮肤设置> </settings>
任何帮助都将非常感激。
谢谢。
答案1
PowerShell 完全支持处理 XML 文件。
例如,如果我们将您提供的第一个简介粘贴到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 元素本身(如巴塞罗那的示例)有点棘手,因为您编辑的是 XML 结构本身,而不是它包含的数据。
[xml]$myXML = Get-Content C:\blah\settings.xml
$myXML.settings.ChildNodes.Item(0).value = "New York, USA"
$myXML.Save("C:\blah\settings.xml")
对于 Skinsettings 示例,请尝试类似以下操作:
$myXML.settings.skinsettings.setting."#text" = "true"
查看以下资源: