【问题标题】:XML file formatting - remove stray CRLFXML 文件格式 - 删除杂散 CRLF
【发布时间】:2016-07-12 07:40:02
【问题描述】:

我有一个输入 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>

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

我认为这是一个两步的过程:

  1. 查找所有不以&gt; 符号结尾的行并添加逗号(这给了我每个条目之间的划分)

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

我正在使用 PowerShell v2 顺便说一句,所以我不能使用 -Raw 来读取源文件。

【问题讨论】:

    标签: xml powershell newline powershell-2.0


    【解决方案1】:

    我将使用 Get-Content cmdlet 读取 XML,并使用带有 XPath 表达式的 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)
    

    输出:

    <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>
    

    【讨论】:

    • 旁注:注意$filepath 变量。 Get-Content$xml.Save() 在不同的世界中玩耍,因此对当前目录有不同的想法。在路径上调用 .NET 方法时,Resolve-Path 通常很有用。或者您强调始终在任何地方使用完整路径。在这种情况下,通常最好将 FileInfo 对象从 Get-ItemGet-ChildItem 中保留下来,cmdlet 可以将其作为文件路径接受,并且您可以轻松地使用其 FullName 属性传递给 .NET 方法。
    • 大家好,感谢 Martin 和 Joey 提供上述 cmets,正如 joey 指出的那样,我只需要调整文件路径,但它现在可以正常工作了。
    猜你喜欢
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2018-02-12
    相关资源
    最近更新 更多