如果p标记后跟其他任何标记,则xpath不会返回文本 - php

我想获取以下HTML的<p><h3>标记之间的所有文本

<div class="bodyText">
  <p>
    <div class="articleBox articleSmallHorizontal channel-32333770 articleBoxBordered alignRight">
  <div class="one">
  <a  href="url" class="img"><img src="url" alt="bar" class="img" width="80" height="60" /></a>
  </div>
  <div class="two">
    <h4 class="preTitle">QIEZ-Lieblinge</h4>
    <h3 class="title"><a  href="url"  title="ABC"  onclick="cmsTracking.trackClickOut({element:this,  channel : 32333770, channelname : 'top_listen',  content : 14832081,  callTemplate : '_htmltagging.Text',  action : 'click',  mouseevent : event});">
        Prominente Gastronomen      </a></h3>
    <span class="postTitle"></span>
    <span class="district"><a href="http://www.qiez.de/berlin/top-listen" title="TOP-LISTEN in Berlin">Berlin</a></span>  </div>
  <div class="clear"></div>
</div>
I want this TEXT</p>
<h3>I want this TEXT</h3>
<p>I want this TEXT</p>
<p>
    <div class="inlineImage alignLeft">
  <div class="medium">
    <img src="http://images03.qiez.de/Restaurant+%C3%96_QIEZ.jpg/280x210/0/167.231.886/167.231.798" width="280" height="210" alt="Schöne Lage: das Restaurant Ø. (c)QIEZ"/>
    <span class="caption">
      Schöne Lage: das Restaurant Ø. (c)QIEZ    </span>
  </div>
</div>I want this TEXT</p>
<p>I want this TEXT</p>
<p>I want this TEXT<br /> </p>
<blockquote><img src="url" alt="" width="68" height="68" />
    "Eigentlich nur drei Worte: Ich komme wieder."<span class="author">Tina Gerstung</span></blockquote>
  <div class="clear"></div>
</div>

我想要所有“我想要此文本”。我用过xpath查询

//div[contains(@class,'bodyText')]/*[local-name()='p' or local-name()='h3']

但是如果<p>标记后跟任何其他标记,它不会给我文本

参考方案

看来您的p元素中包含div元素,这是无效的并且弄乱了东西。如果在循环中使用var_dump,则可以看到它确实拾取了节点,但是nodeValue为空。

对您的html进行快速且肮脏的修复是将p元素中包含的第一个div包装为一个范围。

<span><div class="articleBox articleSmallHorizontal channel-32333770 articleBoxBordered alignRight">...</div></span>

更好的解决方法是将div元素放在段落之外。

如果您使用肮脏的解决方法,则需要像这样更改查询:

$xpath->query("//div[contains(@class,'bodyText')]/*[local-name()='p' or local-name()='h3']/text()");

如果您没有源HTML的控制权。您可以复制html并删除有问题的div:

$nodes = $xpath->query("//div[contains(@class,'articleBox')]");
$node = $nodes->item(0);
$node->parentNode->removeChild($node);

使用simple_html_dom可能会更容易。也许您可以尝试以下方法:

include('simple_html_dom.php');
$dom = new simple_html_dom();
$dom->load($html);

foreach($dom->find("div[class=bodyText]") as $parent) {
    foreach($parent->children() as $child) {
        if ($child->tag == 'p' || $child->tag == 'h3') {
            // remove the inner text of divs contained within a p element
            foreach($dom->find('div') as $e) 
                $e->innertext = '';
            echo $child->plaintext . '<br>';
        }
    }
}

故障排除“警告:session_start():无法发送会话高速缓存限制器-标头已发送” - php

我收到警告:session_start()[function.session-start]:无法发送会话缓存限制器-标头已发送(错误输出开始如果我将表单数据提交到其他文件进行处理,则可以正常工作。但是,如果我将表单数据提交到同一页面,则会出现此错误。请建议<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0…

Div单击与单选按钮相同吗? - php

有没有一种方法可以使div上的click事件与表单环境中的单选按钮相同?我只希望下面的div提交值,单选按钮很丑代码输出如下:<input id="radio-2011-06-08" value="2011-06-08" type="radio" name="radio_date&#…

PHP-复选框组 - php

我有一个需要发布的表单复选框组。<input type="checkbox" value="true" checked name="chk0[]"> <input type="checkbox" value="false" name=…

使用PHP包含时的淡入淡出过渡 - php

我正在尝试使用jQuery或CSS(或其他方式!)在DIV中包含的php页面上创建淡入淡出或滑动过渡。我四处搜寻,发现了很多淡入淡出过渡的示例,这些实例彼此淡入淡出div或隐藏内容淡入淡出,但是这种情况略有不同。我有一个DIV,其内容由导航栏控制。选中后,每个页面都可以使用PHP成功地包含在div中,但我想使内容淡入和淡出。关于如何在页面更改之间进行漂亮过渡…

AJAX调用只能与$(document).on('click')一起使用 - php

我有一个显示数据库条目的表。用户能够为每一行打开一个弹出菜单。选项之一是删除数据库条目,并且该表应通过AJAX调用相应地刷新。只要有人单击#delete-toggle中的table-popup,我就会在HTML页面上进行AJAX调用(table-popup是div,当有人单击每行中存在的表中的table-edit-button时出现的表): <div …