Powershell将我的xml文件格式从UNIX (LF) UTF-8更改为Windows (CR LF) UTF-8



我正在用Powershell更新一些xml文件,它们来自Linux机器。 一旦我完成更新,文件就会被额外的空格等弄乱,不好,我无法使用它。

Changes from:
UNIX )(LF) UTF-8
To
Windows (CR LF) UTF-8-BOM

有谁知道如何保持与我保存的格式相同的格式。

$myfile = "C:hrfeedoutput$file"
$stringToXML.save($myfile)

谢谢

如果您想在没有 BOM 的情况下将 xml 另存为 UTF-8 并且nunix 样式换行符而不是rn,则不能在 Windows 上使用标准Save()方法,需要自己创建一个函数来执行此操作。

以您之前的问题为例,您可以这样做:

[xml]$xmldata = @"
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Identity PUBLIC "point.dtd" "point.dtd"[]>
<Identity  created="1525465321820" name="Onboarding - GUI - External">
<Attributes>
<Map>
<entry key="displayName" value="Onboarding - GUI " />
<entry key="firstname" value="Z Orphaned ID" />
</Map>
</Attributes>
</Identity>
"@
# do something with the xml data

要将 xml 保存到带有 UNIX 样式换行符的文件以及 UTF-8 无 BOM 编码,您可以使用此功能:

function Out-UnixXml {
[CmdletBinding()]
param(
[Parameter(ValueFromPipeline = $true, Mandatory = $true, Position = 0)]
[xml]$xml,
[Parameter(ValueFromPipeline = $true, Mandatory = $true, Position = 1)]
[Alias('FilePath')]
[string]$Path
)
try {
$settings = [System.Xml.XmlWriterSettings]::new()
$settings.Indent       = $true                                     # defaults to $false
$settings.NewLineChars = "`n"                                      # defaults to "`r`n"
$settings.Encoding     = [System.Text.UTF8Encoding]::new($false)   # $false means No BOM
$xmlWriter = [System.Xml.XmlWriter]::Create($Path, $settings)
$xml.WriteTo($xmlWriter)
$xmlWriter.Flush()
}
finally {
# cleanup
if ($xmlWriter) { $xmlWriter.Dispose() }
}
}

并像这样使用它而不是$xmldata.Save('C:somefile.xml')

Out-UnixXml $xmldata 'C:somefile.xml'

至于 DOCTYPE 声明中的方括号。 请参阅 XmlDocument.Save(( 在文档类型声明中插入空方括号

相关内容

  • 没有找到相关文章