我需要使用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>
谁能告诉我为什么会这样? 非常感谢你。
答案 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