9

我搜索并尝试了几个解决这个问题的方法,但没有一个有效:我有这个 HTML

<div class="detalhes_colunadados">
   <div class="detalhescolunadados_blocos">
     <h5>Descrição completa</h5>
    Sala de estar/jantar,2 vagas de garagem cobertas.<br>
    </div>
    <div class="detalhescolunadados_blocos">
      <h5>Valores</h5>
            Venda: R$ 600.000,00<br>
          Condomínio: R$ 660,00<br>
    </div>
</div>

并且想通过 XPath 仅提取第一个 div class="detalhescolunadados_blocos" 中不是 h5 标记的文本内容。

我试过了://div[@class='detalhescolunadados_blocos']/[1]/*[not(self::h5)]


为了更直接地回答这个问题,使用数组而不是标量列表执行查询的方法只是将数组传递给它。 $sth->execute(@params)会工作得很好。

if ($x) {$extraFields .= ' , X'; $extraValues = ',? '; @params = (99); }
if ($y) {$extraFields .= ' , Y, Z'; $extraValues = ',?, ? '; @params = (88, 77); }

my $theBasicQuery = "INSERT INTO sometable (A, B, $extraFields) VALUES (?, ? $extraValues)";

$sth = $dbh->prepare($theBasicQuery) or error

$sth->execute(1,2, @params);
4

3 回答 3

12

试试下面的 XPath 表达式:

//div[@class='detalhescolunadados_blocos'][1]//text()[not(ancestor::h5)]

这将返回:

$ xmllint --html --shell so.html
/ > xpath //div[@class='detalhescolunadados_blocos'][1]//text()[not(ancestor::h5)]    
Object is a Node Set :
Set contains 2 nodes:
1  TEXT
    content=      
2  TEXT
    content=     Sala de estar/jantar,2 vagas de gar...
于 2013-02-27T22:01:55.193 回答
0

在我看来,这可行:

//div[@class="detalhescolunadados_blocos"]/text()
于 2013-02-27T21:59:33.557 回答
0

尝试这样做:

//div[@class="detalhes_colunadados"]/div/text()
于 2013-02-27T22:01:31.650 回答