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

时间:2013-11-20 17:00:01

标签: xml powershell

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

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

然后我将在本地计算机上安装一个新的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>

但是,在使用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>

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

3 个答案:

答案 0 :(得分:6)

根据上面和this blog post

上的链接,这对我有用
$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()

'缩进'设置是个人品味;我更喜欢我的XML人类可读。

答案 1 :(得分:1)

不使用get-content读取xml,而是直接使用XmlDocument读取xml:

功能测试($ path) {

$xDoc = New-Object System.Xml.XmlDocument
$file = Resolve-Path($path)

$xDoc.Load($file)
$xDoc.Save($file) #will save correctly

}

答案 2 :(得分:0)

“”是UTF-8的Byte Order Mark。有一个解决方案,用于编写没有BOM的UTF-8文件: Using PowerShell to write a file in UTF-8 without the BOM