代码点\ u0008在Perl脚本中不是XML中的有效字符

时间:2013-03-28 18:45:35

标签: xml perl

我试图从控制台日志中查找错误并使用Perl形成XML,对于某些文件我收到错误,因为“Code point \ u0008不是XML中的有效字符/ codepath/getErrors.pl第498行”

浏览\ u0008会谈到退格字符,但我不知道如何从字符串/文本中删除它。

如果您可以在阅读控制台日志时帮助我删除此类控制字符,那将非常棒,这样XML格式就可以运行而没有任何错误。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

Backspaces确实没有valid character in an XML file。这表明生成“XML”的工具在某种程度上被打破了。如果可能,请在那里应用修复。

如果确实如此,您可以过滤掉文件中的退格,例如

$ perl -pe's/\x08//g' <brokenfile.not-xml >fixedfile.still-not-xml

如果您的文件包含其他控制字符,则可以将正则表达式扩展到整个范围:

#filtering forbidden control characters in the ASCII range
$ perl -pe's/[\x00-\x08\x0B-\x0C\x0E-\x1F]//g' <brokenfile.not-xml >fixedfile.still-not-xml

合法的XML字符是:

Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

但请注意,您的原始文件不是 XML,并且您使用的任何库都是通过抛出错误做正确的事情。

根据文件(意图)所代表的数据,过滤掉控制代码可能会改变该数据的含义。