当元素为空时,保存会向 XML 添加返回换行符

5 xml powershell

我正在加载一个 XML 文档,其中有一些没有内部文本的标签。

如果我用一些数据填充内部文本,那么它会根据需要工作(您可以在一行上获得开始标记、内部文本和结束标记),如下所示...

<element>value</element>
Run Code Online (Sandbox Code Playgroud)

没有值的标签会出现问题。这些应该以与上面相同的方式显示,当然没有值除外,如下所示:

<element></element>
Run Code Online (Sandbox Code Playgroud)

但是,当内部文本有空字符串时,它会添加回车符和换行符,这不是预期的!它最终看起来像下面这样:

<element>
</element>
Run Code Online (Sandbox Code Playgroud)

我的代码:

$input_dir  = "F:\uma\zz"
$output_dir = "F:\uma\zz"
[xml]$xdoc  = Get-Content "$input_dir\Subnet_Network_41.xml"
$inprange   = 5
foreach ($i in $inprange) {
    $xdoc.Subnet.Id   = "Network_$i"
    $xdoc.Subnet.Name = "Network_$i"
    $xdoc.Save("$output_dir\Subnet_Network_$i.xml")
}
Run Code Online (Sandbox Code Playgroud)

小智 3

我自己已经解决了这个问题。我曾经Select-xml 阅读过 xml 文件并且它有效。保存 xml 文档时没有添加回车换行符。下面是工作代码。

$input_dir  = "F:\uma\zz"
$output_dir = "F:\uma\zz"
$xdoc = ( Select-Xml -Path $input_dir\Subnet_Network_41.xml -XPath / ).Node
$inprange   = 5
foreach ($i in $inprange) {
    $xdoc.Subnet.Id   = "Network_$i"
    $xdoc.Subnet.Name = "Network_$i"
    $xdoc.Save("$output_dir\Subnet_Network_$i.xml")
}
Run Code Online (Sandbox Code Playgroud)

要了解更多信息,Select-xml请参阅以下博客: https://blog.stangroome.com/2014/02/10/powershell-select-xml-versus-get-content/