使用Powershell编辑.XML文件,编码

Pay*_*son 6 xml powershell

我需要使用powershell编辑.xml文件.我需要做的是从服务器下载.xml文件,更新版本号,然后将其保存在我的本地计算机中.这就是我做的.

[xml]$myXML = get-content $xmlFileServer
$myXML.'ivy-module'.info.revision = $newVersion
$myXML.Save($newXMLFileName)
Run Code Online (Sandbox Code Playgroud)

然后我将在我的本地计算机上有一个新的xml文件.但是,我怀疑编码是不同的,因为我无法使用此.xml文件进行处理.我应该得到的.xml是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd" xmlns:e="http://ant.apache.org/ivy/extra">
  <info organisation="XXXX" module="XXXX" revision="2.0.1.0" status="release" publication="20131119202217" />
  <publications>
    <artifact name="XXXX" type="dll" ext="zip" conf="*" />
  </publications>
</ivy-module>
Run Code Online (Sandbox Code Playgroud)

但是,使用powershell进行编辑后,.xml包含一些隐藏信息.我试着用NotePad ++打开,我得到这样的东西:

<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd" xmlns:e="http://ant.apache.org/ivy/extra">
  <info organisation="XXXX" module="XXXX" revision="2.0.1.0" status="release" publication="20131119202217"/>
  <publications>
    <artifact name="XXXX" type="dll" ext="zip" conf="*"/>
  </publications>
</ivy-module>
Run Code Online (Sandbox Code Playgroud)

谁能告诉我为什么会这样?非常感谢.

小智 6

这对我来说很有用,基于上面的链接和这篇博文

$enc = New-Object System.Text.UTF8Encoding( $false )
$wrt = New-Object System.XML.XMLTextWriter( 'c:\path\out.xml', $enc )
$wrt.Formatting = 'Indented'
$myXML.Save( $wrt )
$wrt.Close()
Run Code Online (Sandbox Code Playgroud)

'缩进'设置是个人品味; 我更喜欢我的XML人类可读.$ wrt.Close()也是必需的.


mal*_*der 0

“\xc3\xaf\xc2\xbb\xc2\xbf”是UTF-8 的字节顺序标记。这里有一个编写不带 BOM 的 UTF-8 文件的解决方案:\n使用 PowerShell 以不带 BOM 的 UTF-8 格式编写文件

\n

  • 您能否扩展答案以展示如何将链接的解决方案与 XML 文件合并?`[System.IO.File]::WriteAllLines($MyPath, $myXML, $Utf8NoBomEncoding)` 只是打印出“System.Xml.XmlDocument”。我宁愿不必使用 $myXML.Save() 编写一次,然后再次重新读取它以在没有 BOM 的情况下保存。 (3认同)