使用powershell修改XML节点的值

使用powershell修改XML节点的值,xml,powershell,Xml,Powershell,我想使用PowerShell脚本修改以下两个路径中的值 使用以下代码获取值。如何修改它们并将其保存到原始文件 例:1.将以下路径的值更改为5.0 ([xml] (Get-Content -Raw file.xml)).Map.StyleGroup.RootTopicDefaultsGroup.DefaultSubTopicShape.RightMargin 2.将以下路径的值更改为false ([xml] (Get-Content -Raw file.xml)).Map.Custom.Upda

我想使用PowerShell脚本修改以下两个路径中的值

使用以下代码获取值。如何修改它们并将其保存到原始文件

例:1.将以下路径的值更改为5.0

([xml] (Get-Content -Raw file.xml)).Map.StyleGroup.RootTopicDefaultsGroup.DefaultSubTopicShape.RightMargin
2.将以下路径的值更改为false

([xml] (Get-Content -Raw file.xml)).Map.Custom.UpdatedNamedView
3.保存到原始文件

注意:使用替换方法不起作用,因为实际文档中有许多相同的字段

file.xml:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ap:Map xmlns:ap="http://schemas.mindjet.com/MindManager/Application/2003" OId="pdhXhObhC0avKT9HfmeUMQ==" xmlns:pri="http://schemas.mindjet.com/MindManager/Primitive/2003" xmlns:cor="http://schemas.mindjet.com/MindManager/Core/2003" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.mindjet.com/MindManager/Application/2003 http://schemas.mindjet.com/MindManager/Application/2003 http://schemas.mindjet.com/MindManager/Core/2003 http://schemas.mindjet.com/MindManager/Core/2003 http://schemas.mindjet.com/MindManager/Delta/2003 http://schemas.mindjet.com/MindManager/Delta/2003 http://schemas.mindjet.com/MindManager/Primitive/2003 http://schemas.mindjet.com/MindManager/Primitive/2003">
  <cor:Custom Uri="http://schemas.mindjet.com/MindManager/UpdateCompatibility/2004" cst0:UpdatedCategories="true" Index="0" cst0:UpdatedNamedView="true" cst0:UpdatedTextLabelSetIds="true" cst0:UpdatedGanttViewProperties="true" cst0:UpdatedVisibilityStyle="true" cst0:UpdatedDuration="true" xmlns:cst0="http://schemas.mindjet.com/MindManager/UpdateCompatibility/2004"/>
  <ap:StyleGroup>
    <ap:RootTopicDefaultsGroup>
      <ap:DefaultSubTopicShape BottomMargin="3.5" SubTopicShape="urn:mindjet:RoundedRectangle" VerticalBottomMargin="2.5" RightMargin="3.5" LeftMargin="3.5" VerticalLeftMargin="2.5" VerticalRightMargin="2.5" VerticalTopMargin="2.5" TopMargin="3.5"/>
    </ap:RootTopicDefaultsGroup>
  </ap:StyleGroup>
</ap:Map>

相关文件下载:

节点视频演示:

  • 将输入文件解析为
    [xml]
    ()实例并保存该实例

  • 通过使用点符号修改该实例的元素

  • 使用
    [xml]
    实例的方法将修改后的DOM保存到(原始)文件中


@tianyi:XML严格基于文本(基于字符串)。如果要使用PowerShell布尔值
$true
$false
,它们将逐字字符串化(转换为字符串)为
true
false
——请注意开头的大写字符。
# Get the full path of the input file.
$filePath = Convert-Path file.xml

# Parse the file into an XML DOM.
[xml] $xml = Get-Content -Raw $filePath

# Modify the attributes of interest.

$xml.Map.StyleGroup.RootTopicDefaultsGroup.DefaultSubTopicShape.RightMargin = '5.0'

$xml.Map.Custom.UpdatedNamedView = 'false'

# Save the modified DOM back to the input file.
# Note: Be sure to use a *full* path, because .NET's working dir
#       usually differs from PowerShell's.
$xml.Save($filePath)