如何以编程方式在一行中打开和关闭xml的标签?

时间:2012-08-17 10:39:55

标签: xml perl shell

我有一个xml文件,如下所示:

<tr>
   <td>data1</td>
   <td>data2</td>
</tr>

我想在一行中显示tr标签:

<tr><td>data1</td><td>data2</td></tr>

此外,我希望这适用于xml文件中的每个tr标记。 请帮忙。

编辑原始问题。

3 个答案:

答案 0 :(得分:1)

完全天真和真正的解析器之间的解决方案:

$xmlConetnts =~ s/\>\s*\n\s*\</></g;

这会将> newline <替换为><

由于XML不允许在文本数据中使用<,因此除非您有CDATA部分,否则应该是安全的。

答案 1 :(得分:0)

简单:不要在HTML /输出中添加新行。

答案 2 :(得分:0)

这个问题并不像看起来那么简单。这样做的天真程序可能如下所示:

use strict;
use warnings;

while ( my $line = <DATA> ) {
    if ( $line =~ /<tr>/ ) {
        while ( $line !~ /<\/tr>/ ) {
            chomp $line;
            $line =~ s/^\s+//;
            print $line;
            $line = <DATA>;
        }
        print "\n";
    }
    print $line;
}

__DATA__
<foo>
    foo
</foo>
<tr>
    <td>data1</td>
    <td>data2</td>
</tr>
<bar>
    bar
</bar>

但是这只有在文件格式化有利于程序并且所讨论的标签不嵌套时才有效。我建议你研究一下XML解析器并为此编写一个自定义漂亮的打印机。一个起点可能是研究模块XML::Parser