php xpath获取HTML元素+邻居元素(如果存在)

时间:2017-07-26 13:16:01

标签: php xpath

如何获取具有指定类及其邻居的HTML元素并将其保存为HTML?

这是我的PHP。这工作正常,但只返回指定类的元素。此代码在具有我正在查找的类的项列表中找到并返回HTML内容。但是我也没有返回项目中的元素。 即我的php只返回带有<a href="">类的元素cf_sel_opt,但我还需要让邻居隐藏<input>

foreach ($filters_render_array['html'] as $key => $value) {
    if (strpos($key, 'custom_f_') !== false) {
        $html = new DOMDocument();
        $html->loadHTML($value);
        $xpath = new DOMXpath($html);
        $elements = $xpath->query('//li/*[contains(@class,"cf_sel_opt")]');
        if (!is_null($elements)) {
          foreach ($elements as $element) {
                $array[] = $html->saveHTML($element);
          }
        }
    }
}
if(!empty($array)) { ?>
    <div class="filter-reset">
        <a class="cf_resetAll_link" rel="nofollow" data-module-id="<?php echo $module->id ?>" href="<?php echo JRoute::_($resetUri)?>">
            <span class="cf_resetAll_label"><?php 
                echo JText::_('MOD_CF_RESET_ALL')?>
            </span>
        </a>
        <div><?php
            echo "<ul>";
            foreach($array as $sel_item) {
                echo "<li>" . $sel_item . "</li>";
            }
            echo "</ul>";   ?>
        </div>
    </div><?php 
} ?>

HTML

<ul>
<li>
   <a href="#" class="cf_option  cf_color_btn cf_sel_opt" rel="nofollow" data-module-id="129" id="custom_f_35_129_elid313038_a" style="">
      <span class="cf_color_inner" style="background-color:black; width:100%;">
      </span>
   </a>
   <input name="custom_f_35[]" value="313038" type="hidden">
</li>
</ul>

ANSWER

对于任何会遇到类似问题的人,我找到了一个功能性解决方案。 我修改了我的查询:

$elements = $xpath->query('//li/*[contains(@class,"cf_sel_opt")]);

到此:

$elements = $xpath->query('//li/*[contains(@class,"cf_sel_opt")]/ancestor::li[1]');

0 个答案:

没有答案