根据xpath中的类和样式排除标记

时间:2012-02-04 19:00:08

标签: php xml regex parsing xpath

我有以下代码用于xpath查询...

<div class="buying">


<h1 class="parseasinTitle ">

<span id="btAsinTitle">Top Ten Tips for Growing Your Own Tomatoes (The Basic Art of Italian Cooking) <span style="text-transform: capitalize; font-size: 16px;">[Kindle Edition]</span></span>


</h1>
</div>

我只想提取

  

种植自己的西红柿的十大秘诀(意大利烹饪的基本艺术)

所以我使用textContent和以下xpath查询

$xpath_books->query('//span[@id="btAsinTitle"]')

但结果是

  

种植自己的西红柿的十大秘诀(意大利烹饪的基本艺术)[Kindle版]

我认为,我必须排除<span style="text-transform: capitalize; font-size: 16px;">,以达到我的目的, 我该怎么做 ?

2 个答案:

答案 0 :(得分:3)

使用此XPath:

//span[@id="btAsinTitle"]/text()

答案 1 :(得分:3)

您的XPath确实仅返回具有id的节点,但由于DOM是链接DOMNode的树,因此返回的节点将包含子节点。当您使用nodeValuetextContent访问返回的范围时,PHP将返回所有子节点的组合DOMText节点,包括持有“Kindle Edition”的子跨度。

      SPAN
     /    \
   TEXT   SPAN
            \
            TEXT

有关DOMDocument in php

的更多信息

如果只想获取第一个文本部分,则必须获取第一个childNode的nodeValue:

echo $result->item(0)->childNodes->item(0)->nodeValue;

直接用XPath获取该字符串的替代方法是

echo $xpath->evaluate('string(//span[@id="btAsinTitle"]/text())');

请参阅http://php.net/manual/en/domxpath.evaluate.php

如果要返回整个DOMText节点,请使用

//span[@id="btAsinTitle"]/text()