如何用另一个div []元素替换div []元素?

时间:2012-06-26 07:22:25

标签: perl html selenium

for ($i=0; $i<10; $i++)
{
  my $v1 = $sel->get_text("//body[\@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/**div**/table/tbody/tr/td/div/div");

my $v2 = $sel->get_text("//body[@\id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/**div**/table/tbody/tr/td[2]/div/div")

print ($v1 . $v2);
}

对于每次迭代,它必须找到从div[10]&amp;开始的第14个元素。将其替换为增加的div[ ]元素(例如:如果第14个元素为div,请将其替换为div[2]。在下一个迭代中找到第14个元素,即div[2]&amp; replace它由div[3]&amp;等等。

通过使用PATTERN匹配,它不能。是否有任何方法使用正则表达式来查找特定元素&amp;替换它?我怎么能这样做?

 my $a = "//body[\@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/**div**/table/tbody/tr/td/div/div"; 
    my @arr = split ('/' , $a); 
    print "@arr \n"; 
    my $size1 = @arr; 
    print "$size1\n"; 
    print $arr[16]; 
    foreach my $a2 (@arr) 
    { 
    print "$a2 \n"; 
    }
my $b = "//body[\@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/**div**/table/tbody/tr/td[2]/div/div";

上述问题中提到的两个变量为v1&amp; v2(编辑为$ a和$ b),修改必须适用于它们。我想我几乎接近你所说的。能否请你进一步帮助我

2 个答案:

答案 0 :(得分:1)

use 5.010;
my $xpath = q(//body[@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/div/table/tbody/tr/td/div/div);

for my $i (0..10) {
    my @nodes = split qr'/', $xpath;
    $nodes[16] .= "[$i]" unless 0 == $i;
    say join '/', @nodes;
}

结果:

//body[@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/div/table/tbody/tr/td/div/div
//body[@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/div[1]/table/tbody/tr/td/div/div
//body[@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/div[2]/table/tbody/tr/td/div/div
//body[@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/div[3]/table/tbody/tr/td/div/div
//body[@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/div[4]/table/tbody/tr/td/div/div
//body[@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/div[5]/table/tbody/tr/td/div/div
//body[@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/div[6]/table/tbody/tr/td/div/div
//body[@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/div[7]/table/tbody/tr/td/div/div
//body[@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/div[8]/table/tbody/tr/td/div/div
//body[@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/div[9]/table/tbody/tr/td/div/div
//body[@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/div[10]/table/tbody/tr/td/div/div

答案 1 :(得分:-1)

嗯,所有元素都用 / 分隔,对吗?因此,您可以使用本机拆分方法基于/拆分div [10]之后的文本部分。将其存储在数组 $ arr 中。合并它以查找字符串的长度,例如 $ len 。找到 div [10] 的索引,例如 $ orig_index 。然后你找到第14个元素,做一个正则表达式匹配,看看它在哪个格式:

$arr[13] =~ /div([\d+])?/;
if ($1) {
  $arr[13] =~ /div[$1]/div[($1+1)]/e;
      }
else {
   $arr[13] = div[2];
   }

现在更改了第14个元素,连接数组以从div [10]和第14个元素之间的部分获取部分的新输出字符串:

{
local $" = ''; 
$newstring = "@arr";
}
splice($originalstring,$orig_index,$len,$newstring);

我认为那样做。