【发布时间】:2013-08-08 18:38:40
【问题描述】:
我正在尝试将样式表声明添加到我的脚本处理的任何 XML 文件的第二行。我的脚本在循环中将文件逐行读取到 $inputline 字符串中。
我有以下写得很糟糕的 Perl 代码:
while(<INPUT>) {
$inputline = $_;
if ($inputline =~ m/\<\?xml\ version\=\"1\.0\"\ encoding\=\"UTF-8\"\?\>/){
print OUTPUT "\<\?xml version\=\"1.0\" encoding\=\"UTF-8\"\?\>\n";
print OUTPUT "\<\?xml\-stylesheet type\=\"text\/xsl\" href\=\"askaway_transcript_stylesheet\.xsl\"\?\>\n";
}
#lots of other processing stuff
}
我认为这曾经有效,但不再有效。测试不同的输出并进行调整告诉我 IF 语句失败了,我可能在那里做错了。
有什么建议吗?
【问题讨论】:
-
任何 xml文件?如果是这样,这将只匹配一个 specific xml 标头。关于 XML 的匹配,我推荐你:stackoverflow.com/a/1732454/179216
-
如果您的输入与此模式有任何偏差,例如,不同的标点符号或中间的空白,您的正则表达式将不匹配。你确定你的输入没有变化吗?
-
在
U前面有一个\。 Perl 将任何转义的标点视为文字标点字符,并将任何转义的字母视为特殊的正则表达式命令。\U将字符串中的以下字符大写。 (实际上,\U不是正则表达式转义序列,而是双引号字符串转义序列) -
现在,标题应该都是一样的。我知道它很死板,但我可以稍后解决。
-
Adrian - 感谢您指出逃脱的 U... 愚蠢的错误。