如何用另一个div []元素替换一个div []元素?
问题描述:
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);
}
对于每次迭代,它必须找到14个元素从div[10]
&开始增加div[ ]
元素替换(例:如果14个元素是div
,通过div[2]
取代它在未来iterartion找到14元即div[2]
&替换为div[3]
&等)。如何用另一个div []元素替换一个div []元素?
通过使用PATTERN匹配,它不能。有没有什么方法通过使用正则表达式来找到替代它的特定元素&?我该怎么做 ?如在上面提到的问题,因为V1 V2 &
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";
两个变量(编辑为$ a和$ b)中,修改已申请它们两者。我想我已经接近你所说的了。可以同时请帮我进一步
答
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
答
嗯,所有的元素都分开/,对吧?因此,您可以使用本地拆分方法根据/分割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);
我认为那样做。
@ Cupidvogel:什么是在if语句的意思是$ 1吗? –
哦,你需要详细研究Perl的正则表达式。 ** 1美元**是成功比赛时用括号括起来的第一组。因此,如果元素是** div [5] **,那么$ 1将是5. – SexyBeast
请将代码格式化为正确的答案,您编写的代码几乎不可读。 – SexyBeast