我有一个xml数据显示如下。我想对这些数据进行一些操作。每当'entry'标签中缺少'colname'属性时,我的代码应该在'tgroup'标签中插入该属性采用'cols'属性的值。逻辑不工作在perl
<tbl ID="I78">
<table colsep="0" frame="none" rowsep="0">
<tgroup cols="4">
<tbody valign="top">
<row>
<entry>i.</entry>
<entry>181.10</entry>
<entry>An inmate shall comply with the dispositions imposed by a hearing officer in a Tier I, Tier II and Tier III hearings.</entry>
<entry>I, II, III</entry>
</row>
</tbody>
</tgroup>
</table>
</tbl>
<tbl ID="I93">
<table colsep="0" frame="none" rowsep="0">
<tgroup cols="4">
<tbody>
<row>
<entry align="center"><ital>Pledge number</ital></entry>
<entry align="center"><ital>Date</ital></entry>
<entry align="center"><ital>R</ital></entry>
<entry><ital>A or S</ital></entry>
</row>
<row>
<entry><ital>Disposition column</ital></entry>
<entry>(<ital>Renewed</ital>)</entry>
<entry>(<ital>Renewed</ital>)</entry>
</row>
<row>
<entry>(<ital>Auction Sale</ital>)</entry>
</row>
</tbody>
</tgroup>
<eos></eos>
</table>
<eop></eop>
</tbl>
我的代码如下所示:
foreach $line (@data){
if($line =~ /<tgroup(.*?)cols=\"(.*?)\">/i){
$colcount=$2;
print "\nTgroup tag found... no of cols are $colcount";
}
$templine=$line;
my $temp2line;
while($templine=~ /<tbody(.*?)>(.*?)<\/tbody>/){
$temp2line=$2;
while($temp2line=~ /<row>(.*?)<\/row>/){
$rowdata=$1;
$rowdataforfinalreplacing=$rowdata;
$temprowdata=$rowdata;
while($rowdata=~/<entry align="center">/i){
for ($i; $i<= $colcount; $i++){
$temprowdata=~s/<entry align="center">/<entry align="center" colname=\"$i\">/i;
print "\ni value :$i";
}
$rowdata=~s/<entry(.*?)<\/entry>//;
}
while($rowdata=~/<entry>/i){
for (my $i=1; $i<= $colcount; $i++){
$temprowdata=~s/<entry>/<entry colname=\"$i\">/i;
}
$rowdata=~s/<entry>(.*?)<\/entry>//;
}
$temp2line=~s/<row>(.*?)<\/row>//i;
$line=~s/$rowdataforfinalreplacing/$temprowdata/sgi;
}
}
的问题是,当两行同时存在,只有一排得到更新。当我调试时,我发现值正在正确更新,但在写入输出文件时,它们被忽略。我无法找到控制在我的代码中出错的地方。任何帮助,这是高度赞赏。提前致谢 !
以下是代码的输出。突出显示的数据没有更新。
确实运行这个脚本会覆盖源文件吗?我看到只有一个参数传递给这个.. –
@RaviKumar:不会。它会将它打印到外壳。重定向到一个文件,如:'perl script.pl xmlfile> out_xmlfile' – Birei
好的。在每一行中,如果有四个输入标签,则colname值应该从1增加到4.您的输出显示常量值。我该如何改变它? –