繁体   English   中英

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

[英]Edit .XML file with Powershell, encoding

我需要使用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>

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

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

$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人类可读。 $ wrt.Close()也是必需的。

不使用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

}

“”是UTF-8的字节顺序标记 这里有一个没有BOM的UTF-8文件的解决方案: 使用PowerShell以UTF-8编写一个没有BOM的文件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM