xml - Powershell 将我的 xml 文件格式从 UNIX (LF) UTF-8 更改为 Windows (CR LF) UTF-8-BOM
问题描述
我正在使用 powershell 更新一些 xml 文件,它们源自 Linux 机器。一旦我更新完文件,就会被多余的空格弄得一团糟,我无法使用它。
Changes from:
UNIX )(LF) UTF-8
To
Windows (CR LF) UTF-8-BOM
有谁知道如何保持与我保存时相同的格式。
$myfile = "C:\hrfeed\output\$file"
$stringToXML.save($myfile)
谢谢
解决方案
如果要将 xml 保存为没有 BOM 的 UTF-8 并使用 unix 样式的换行符\n
而不是\r\n
,则不能Save()
在 Windows 上使用标准方法,需要自己创建一个函数来执行此操作。
以您之前的问题为例,您可以这样做:
[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() 在 doctype 声明中插入空方括号
推荐阅读
- java - 如何将此模式存储在 Java 数组列表中?
- discord.js - 我如何获得 guild.id
- python - 在 Python 中使用 ANTLR4 解析数学表达式
- php - 满足特定条件时如何停止 webhook 执行?
- python - 模板渲染期间出错。过滤器无效:'bootstrap'
- python-3.x - Django 模型:“ModelFormOptions”对象没有属性“private_fields”
- reactjs - TypeError:无法读取 tsx 文件上未定义的属性“地图”
- selenium-webdriver - Selenium Webdriver + Jmeter + StormRunner 进行性能测试
- angular - 重置表单值后无法设置文本框值
- encryption - 图片,视频在whatsapp中加密了吗?