如何使用Powershell从XML中删除特殊/错误字符

时间:2017-08-16 06:35:27

标签: xml powershell powershell-v3.0

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

enter image description here

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

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

1 个答案:

答案 0 :(得分:2)

以下正则表达式将通过指定一个否定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