【发布时间】:2012-09-29 21:37:03
【问题描述】:
我们的应用程序在接收端对 XML 数据进行回溯分析。我们的应用程序没有可用的 Java 或 .NET,但在 Unix 中运行,所以它有 awk 和 Perl。
文件中的 XML 消息包含:
<?xml version="1.0" encoding="ISO-8859-1" ?>
我在 Perl 和 awk 中尝试了一些选项来删除它们,但无法让它们工作:
perl -p -i -e "s/<?xml version="1.0" encoding="ISO-8859-1" ?>//g" inputFile
perl -p -i -e "s/<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>//g" inputFile
perl -p -i -e "s/<\?xml version="1.0" encoding="ISO-8859-1" \?>//g" inputFile
还有其他使用 PERL 或 AWK 的选项吗?
【问题讨论】:
-
您在“接收”XML 时是否使用了 XML 解析器? XML 声明对于解析器很有用,并且试图用解析器以外的任何东西处理任何重要的 XML 都会导致疯狂。而且,如果您使用的是 Unix,那么您可以使用各种语言,只要您安装它们。
-
您的 Perl 代码不起作用,因为
?是正则表达式元字符。在每种情况下将?替换为.或\?,您应该可以。 -
@JonathanLeffler:你是对的。但是我尝试了 perl -p -i -e "s///g" inputFile ,但仍然无法正常工作。我将添加到主要问题中
-
糟糕 - 我没有注意到您将
-e括在双引号中;我会自动使用单引号。这对我有用:perl -p -e 's/<\?xml version="1.0" encoding="ISO-8859-1" \?>//g'.
标签: xml perl awk xml-serialization xml-declaration