我有一个XML文件,我们称之为Project.params,内容如下:
<div class="container">
<img src="something.png" />
</div>
<div class="container">
<img src="something2.png" />
</div>
我需要使用带有&符号的字符串更新“MyPassword”属性。我尝试了以下代码
.container {
width: 200px;
height: 120px;
}
/* resize images */
.container img {
width: 100%;
height: auto;
}
我收到以下错误
<?xml version="1.0"?>
<SSIS:Parameters xmlns:SSIS="www.microsoft.com/SqlServer/SSIS">
<SSIS:Parameter SSIS:Name="MyPassword">
<SSIS:Properties>
<SSIS:Property SSIS:Name="ID">{8ff4ab3f-e607-4ccc-adc0-bececa310d17}</SSIS:Property>
<SSIS:Property SSIS:Name="CreationName">
</SSIS:Property>
<SSIS:Property SSIS:Name="Description">
</SSIS:Property>
<SSIS:Property SSIS:Name="IncludeInDebugDump">0</SSIS:Property>
<SSIS:Property SSIS:Name="Required">0</SSIS:Property>
<SSIS:Property SSIS:Name="Sensitive">0</SSIS:Property>
<SSIS:Property SSIS:Name="Value">ZP</SSIS:Property>
<SSIS:Property SSIS:Name="DataType">18</SSIS:Property>
</SSIS:Properties>
</SSIS:Parameter>
</SSIS:Parameters>
但是,如果我只是从$sourcePath = "C:\Project.params"
$Parameters = @{}
$key = "MyPassword"
#$value = "aabbcc"
$value = "aabbcc&"
$Parameters.add($key, $value)
[xml]$paramxml = Get-Content $sourcePath
$paramxml.Parameters.Parameter | ? { $_.Name -eq $key} |
% {
$parameterxmlnode = $_
$parameterxmlnode.Properties.Property | ? {$_.Name -eq "Value"} |
% {
$oldval = $_
if ($oldval.InnerText -ne $value)
{
Write-Host "Updating property" $key "..."
$oldval.set_InnerXML($value)
$ismodified = $true
}
}
}
变量中删除“&”符号,则一切都按预期工作。有人可以帮忙吗?
答案 0 :(得分:1)
&
需要转义为&
,引号和尖括号也是如此。
您可以使用https://stackblitz.com/edit/embedded-routes-without-children-kd1hms为您转义整个字符串:
$escapedValue = [System.Security.SecurityElement]::Escape($value)
$oldval.InnerXML = $escapedValue
...或者,正如@PetSerAl建议的那样,使用适当的属性InnerText
(而不是InnerXml
),这将自动处理转义:
$oldval.InnerText = $value
答案 1 :(得分:0)
这就是你要找的东西:
[xml]$xml = @'
<?xml version="1.0"?>
<SSIS:Parameters xmlns:SSIS="www.microsoft.com/SqlServer/SSIS">
<SSIS:Parameter SSIS:Name="MyPassword">
<SSIS:Properties>
<SSIS:Property SSIS:Name="ID">{8ff4ab3f-e607-4ccc-adc0-bececa310d17}</SSIS:Property>
<SSIS:Property SSIS:Name="CreationName">
</SSIS:Property>
<SSIS:Property SSIS:Name="Description">
</SSIS:Property>
<SSIS:Property SSIS:Name="IncludeInDebugDump">0</SSIS:Property>
<SSIS:Property SSIS:Name="Required">0</SSIS:Property>
<SSIS:Property SSIS:Name="Sensitive">0</SSIS:Property>
<SSIS:Property SSIS:Name="Value">ZP</SSIS:Property>
<SSIS:Property SSIS:Name="DataType">18</SSIS:Property>
</SSIS:Properties>
</SSIS:Parameter>
</SSIS:Parameters>
'@
$xml.Parameters.Parameter.Name
$xml.Parameters.Parameter.Name = '&MyPassword'
$xml.Parameters.Parameter.Name