更新XML webconfig文件时保留多个双引号

时间:2015-06-30 11:46:07

标签: xml powershell double-quotes

我需要更新XML文件的network host部分。您将从下面的示例中看到,四个部分是双引号。我发现在我的PowerShell脚本中使用双引号更新很困难。我已经通过WWW和StackOverflow上的一些帖子阅读了解决方案。我包括我当前代码中的行和xml中的输出。欢迎在这方面提供任何帮助。

运行PowerShell后,XML中的预期结果。

<system.net>
<mailSettings>
<smtp>        
<network host="mailtrap.io" port="1234" userName="3987455k61f63dd421" password="d6jjjcfc2bf76889" />
</smtp>

PowerShell代码

$root.SelectSingleNode("//system.net/mailSettings/smtp/network").host= "`"mailtrap.io`" port=`"1234`" userName=`"3987455k61f63dd421`" password=`" d6jjjcfc2bf76889`""

代码运行后的XML实际输出(请注意&quot;而不是"):

<network host="&quot;mailtrap.io&quot; port=&quot;25252&quot; userName=&quot; 3987455k61f63dd421&quot; password=&quot;d6jjjcfc2bf76889&quot;" />

1 个答案:

答案 0 :(得分:0)

您误解了XML的结构。您没有network host节点,但network节点有4个属性:

  • host
  • port
  • userName
  • password

您需要分别为每个属性分配值:

$node = $root.SelectSingleNode('//system.net/mailSettings/smtp/network')
$node.host     = 'mailtrap.io'
$node.port     = '1234'
$node.userName = '3987455k61f63dd421'
$node.password = 'd6jjjcfc2bf76889'

如果节点中尚未存在属性,您可以像这样创建它们:

$attr = $root.CreateAttribute('host')
$attr.Value = 'mailtrap.io'
$node.Attributes.Append($attr)