代码之家  ›  专栏  ›  技术社区  ›  Gaurav

简单HTML Dom是否支持:has like解析?

  •  0
  • Gaurav  · 技术社区  · 8 年前

    我必须像这样解析HTML结构:

    <div class='container>
        <div class='inner-div'>
            <span class='text'>...</span>
            <div class='author'>
                <span data-author='Alpha'>...</span>
            </div>
            <div class='summary'>
                <span data-summary='Exclusive'>Text 1</span>
            </div>
        </div>
        <div class='inner-div'>
            <span class='text'>...</span>
            <div class='author'>
                <span data-author='Beta'>...</span>
            </div>
            <div class='summary'>
                <span data-summary='Non-Exclusive'>Text 2</span>
            </div>
        </div>
        <div class='inner-div'>
            <span class='text'>...</span>
            <div class='author'>
                <span data-author='Gamma'>...</span>
            </div>
            <div class='summary'>
                <span data-summary='Exclusive'>Text 3</span>
            </div>
        </div>
        <div class='inner-div'>
            <span class='text'>...</span>
            <div class='author'>
                <span data-author='Delta'>...</span>
            </div>
            <div class='summary'>
                <span data-summary='Non-Exclusive'>Text 4</span>
            </div>
        </div>
        ...
        <div class='inner-div'>
            <span class='text'>...</span>
            <div class='author'>
                <span data-author='Zeta'>...</span>
            </div>
            <div class='summary'>
                <span data-summary='Exclusive'>Text 5</span>
            </div>
        </div>
    </div>
    

    我希望获得第一个“独家”摘要,其中作者不是“Alpha”。在上述示例中,它将是“文本3”。我如何使用简单的HTML DOM甚至XML DOM解析它?

    补遗:我正在寻找使用PHP简单HTML Dom库解析HTML。我知道如何在jQuery中解析它,但简单的HTML Dom库似乎不支持(:has)的任何等价项。

    2 回复  |  直到 8 年前
        1
  •  0
  •   pguardiario    8 年前

    没有,但这里有一个 simple html dom replacement that (你)想要吗 :not :has

    include_once('advanced_html_dom.php');
    
    $html = str_get_html($str);
    
    echo $html->find('.author:not(> [data-author=Alpha]) ~ .summary > [data-summary=Exclusive]', 0);
    
        2
  •  0
  •   Gaurav    8 年前

    $node = $html->find("span[data-summary='Exclusive']",0);
    if ($node->parent()->parent()->find('div.author span',0)['data-author'] == 'Alpha') {
        $node = $html->find("span[data-summary='Exclusive']",1);
    }
    return $node->innertext;
    
    推荐文章