XML文件格式化 - 删除迷路CRLF

时间:2016-07-12 07:40:02

标签: xml powershell newline powershell-v2.0

我有一个输入XML文件(不是很大 - 200),它有一个格式错误的奇怪记录,即由不需要的CRLF字符分隔的音符,这些字符放在不同的行上:

<NonStandardAddress>
    <LocationId>L127755</LocationId>
    <Street>UNKNOWN</Street>
    <PostCode>U</PostCode>
</NonStandardAddress>
<Notes>
67 High Street
Newtown
Newshire
RG30 9ZA</Notes>
<StartDate>1970-12-23</StartDate>

enter image description here

它看起来像这样,一行中的文字用逗号分隔:

enter image description here

我想这是一个两步过程:

  1. 找到所有未以>符号终止的行并添加逗号(此shold在每个条目之间给我一个区分)

  2. 用逗号替换逗号和CRLF的行(这应该将所有不匹配的行重新组合在一行)

  3. 我正在使用PowerShell v2 btw,所以我无法使用-Raw来阅读源文件。

1 个答案:

答案 0 :(得分:3)

我会使用/home/myuser/my_folder_aaaa /home/myuser/my_folder_bbbb /home/myuser/my_folder_cccc cmdlet读取XML,并使用带有XPath表达式的Get-Content方法来检索所有元素。然后迭代文本并将所有SelectNodes替换为CRLF

,

<强>输出:

$filePath = 'your_path'
$xml = [xml](Get-Content $filePath)
$xml.SelectNodes('//text()') | ForEach-Object {  
    $_.Value = ($_.Value.Trim() -split "`r?`n") -join ', '
}
$xml.Save($filePath)