首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >排除xpath中基于类和样式的标记

排除xpath中基于类和样式的标记
EN

Stack Overflow用户
提问于 2012-02-04 19:00:07
回答 2查看 558关注 0票数 2

对于xpath查询,我有以下代码.

代码语言:javascript
运行
复制
<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查询

代码语言:javascript
运行
复制
$xpath_books->query('//span[@id="btAsinTitle"]')

但结果是

自己种植番茄的十大秘诀(意大利烹饪的基本艺术) Kindle版

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-04 19:13:11

使用这个XPath:

代码语言:javascript
运行
复制
//span[@id="btAsinTitle"]/text()
票数 4
EN

Stack Overflow用户

发布于 2012-02-04 19:18:04

您的XPath只返回id的节点,但是因为DOM是链接的DOMNodes树,所以返回的节点将包含子节点。当您使用nodeValuetextContent访问返回的span时,PHP将返回所有子节点的组合DOMText节点,包括包含"Kindle“的子span。

代码语言:javascript
运行
复制
      SPAN
     /    \
   TEXT   SPAN
            \
            TEXT

DOMDocument in php会有更多的相关信息。

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

代码语言:javascript
运行
复制
echo $result->item(0)->childNodes->item(0)->nodeValue;

使用XPath直接获取字符串的另一种方法是

代码语言:javascript
运行
复制
echo $xpath->evaluate('string(//span[@id="btAsinTitle"]/text())');

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

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

代码语言:javascript
运行
复制
//span[@id="btAsinTitle"]/text()
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9143571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档