【问题标题】:How to Remove Special/Bad Characters from XML Using Powershell如何使用 Powershell 从 XML 中删除特殊/错误字符
【发布时间】:2018-01-24 04:24:49
【问题描述】:

我有一个 XML 文件,我想从以下文件中删除那些十六进制字符错误是无效字符:

我不知道 STX 是什么意思,当我尝试将其复制到剪贴板并将其粘贴到 MS Work 中时,它显示了一些其他值。

如何在 powershell 中编写脚本以从我的 XML 文件中删除上述内容。

【问题讨论】:

  • 这些是 ASCII control charactersstart of text 0x02end of text 0x03。至于如何删除,这真的取决于xml文件的内容。
  • @vonPryz 有什么方法可以编写脚本来查找该错误吗??
  • 有没有办法制作脚本?当然有。我们会为你写剧本吗?不太可能。

标签: xml powershell powershell-3.0


【解决方案1】:

以下正则表达式将通过指定一个字符类来否定 XML 文档中的整个有效 unicode 条目集,从而从 XML 中删除任何无效字符:

$rPattern = "[^\x09\x0A\x0D\x20-\xD7FF\xE000-\xFFFD\x10000\x10FFFF]"
$xmlText -replace $rPattern,''

这很容易变成a simple function

function Repair-XmlString
{
  [CmdletBinding()]
  param(
    [Parameter(Mandatory=$true,Position=0)]
    [string]$inXML
  )

  # Match all characters that does NOT belong in an XML document
  $rPattern = "[^\x09\x0A\x0D\x20-\xD7FF\xE000-\xFFFD\x10000\x10FFFF]"

  # Replace said characters with [String]::Empty and return
  return [System.Text.RegularExpressions.Regex]::Replace($inXML,$rPattern,"")
}

然后做:

Repair-XmlString (Get-Content path\to\file.xml -Raw) |Set-Content path\to\file.xml 

【讨论】:

    【解决方案2】:

    功能更新:)

    function Repair-XmlString {
        [CmdletBinding()]
        param(
            [Parameter(Mandatory = $true, Position = 0,ValueFromPipeline)]
            [ValidateNotNullOrEmpty()]
            [string]$String
        )
        Write-Host "Cleaning string for XML parsing [String: $($String)]"
        $rPattern = "[^\x09\x0A\x0D\x20-\xD7FF\xE000-\xFFFD\x10000\x10FFFF]"
        $cleaned = $String -replace $rPattern, ''
        Write-Host "Returning parsed string [String cleaned: $($cleaned)]"
        return $cleaned
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多