我想读取一个XML文件并修改一个元素,然后将其保存回文件。在保留格式的同时,还要保持匹配的行终止符(CRLF vs LF),最好的方法是什么?
这是我所拥有的,但它不这样做:
$xml = [xml]([System.IO.File]::ReadAllText($fileName)) $xml.PreserveWhitespace = $true # Change some element $xml.Save($fileName)
问题是,额外的新行(也就是xml中的空行)被删除,并且在混合了LF和CRLF之后。
感谢帮助一个电源新手:)
您可以使用PowerShell [xml]对象并设置$ xml.PreserveWhitespace = $ true,或使用.NET XmlDocument执行相同的操作:
$f = '.\xml_test.xml' # Using .NET XmlDocument $xml = New-Object System.Xml.XmlDocument $xml.PreserveWhitespace = $true # Or using PS [xml] (older PowerShell versions may need to use psbase) $xml = New-Object xml #$xml.psbase.PreserveWhitespace = $true # Older PS versions $xml.PreserveWhitespace = $true # Load with preserve setting $xml.Load($f) $n = $xml.SelectSingleNode('//file') $n.InnerText = 'b' $xml.Save($f)
请确保在调用XmlDocument.Load或XmlDocument.LoadXml之前设置PreserveWhitespace。
注意:这不保留XML属性之间的空白空间! XML属性中的空白空间似乎被保留,但不在之间。文档涉及保留“空白节点”(node.NodeType = System.Xml.XmlNodeType.Whitespace)而不是属性。