我有一个PowerShell脚本,它读取非常大的XML文件,并提取代表嵌入式C#代码的某些元素的文本值。然后,脚本将元素文本保存到与XML文件结构匹配的目录结构中的.cs代码文件中。为了性能,我使用XmlReader,因为文件太大(有时> 200 MB)。
原始XML文件具有Windows行结尾(CRLF),但.NET Framework XmlReader类在从文件读取时将行结尾从CRLF“标准化”到仅LF(符合XML规范)。
我的问题是:当将文件写出到磁盘时,如何强制PowerShell将行结尾恢复为Windows标准,因此我不会因行结尾的变化而导致源控制“噪音”?
我目前正在使用以下PowerShell语句编写文件:New-Item -Path $path -Force -ItemType file -Value $reader.ReadElementString()
$reader
变量是[System.Xml.XmlReader]
的实例。
答案 0 :(得分:1)
你可以这样做:
$reader.ReadElementString().Replace("`n","`r`n")
答案 1 :(得分:0)
我建议完全放弃System.Xml.Reader
。 PowerShell的内置XML处理更容易管理:
[xml]$data = Get-Content "C:\foo.xml"
$data.SelectNodes("//foo") | % {
$_.bar
$_.baz
} | Out-File "C:\out.txt"