在Powershell中将元素字符串从XML源写入纯文本文件时如何发出Windows行结尾?

时间:2013-02-28 06:14:30

标签: xml powershell newline xmlreader

我有一个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]的实例。

2 个答案:

答案 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"