【发布时间】:2014-03-30 06:42:03
【问题描述】:
我有这样的xml数据
<DBCONNECTION>
<SERVER>1111111</SERVER>
<DBNAME>222222222</DBNAME>
<USER>333333333333</USER>
<PASSWORD>444444444</PASSWORD>
<TABLENAME>5555555555</TABLENAME>
</DBCONNECTION>
<DBCONNECTION>
<SE>ABC</SERVER>
<DBNAME>DEF</DBNAME>
<USER>GHI</USER>
<PASSWORD>JKL</PASSWORD>
<TABLENAME>MNO</TABLENAME>
</DBCONNECTION>
我写了perl提取标签之间的文本
#!/usr/bin/perl
@files = <*.xml>;
open my $out, '>', 'output.xml' or die $!;
foreach $file (@files) {
open (FILE, "$file");
while($line= <FILE> ){
if ($line =~ /<DBCONNECTION>(.*?)<\/DBCONNECTION>/)
{
$a=$1;
print $out("$a\n");
}
}
close FILE;
}
但当 XML 标记之间没有换行符时,此方法有效。现在我想查找标签并提取 XML 文件是否包含换行符。
【问题讨论】:
-
“输入标记”是什么意思?
-
Entet 标记表示在键盘中输入字符,每个 xml 标记的新行。
-
您的意思是要提取多行 XML 元素的值吗?然后你不会逐行解析文件。对不起,我对英语的理解力下降了。
-
查找
(.*?) 之间的所有标签并写入文本输出文件,但我的脚本只工作 xml 包含每个标签没有新行。 -
使用真正的 XML 库。
标签: xml regex perl xml-parsing