【问题标题】:Does Simple HTML Dom support :has like parsing?Simple HTML Dom 是否支持 :has like 解析?
【发布时间】:2018-02-17 23:51:05
【问题描述】:

我必须像这样解析 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”。如何使用 Simple HTML DOM 甚至 XML DOM 解析它?

附录:我正在寻找使用 PHP Simple HTML Dom 库解析 HTML。我知道如何在 jQuery 中解析它,但是 Simple HTML Dom 库似乎不支持 (:has) 的任何等效项。

【问题讨论】:

    标签: php html dom xml-parsing simple-html-dom


    【解决方案1】:

    不,但这里有一个 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);
    

    【讨论】:

    • 感谢您分享有关 advanced_html_dom 的信息。将对其进行测试,并希望它与 SHD 一样快,用于简单解析。将此标记为已接受的答案。保留我自己的答案,以防有人只想在 simple_html_dom 中实现这一点。
    • 看起来很多选择器的 AHD 都坏了。现在必须坚持使用 SHD。
    • 实际的 css 选择器损坏了吗?我不这么认为,但如果你这样做,你应该打开一个问题。
    • $html->find('div.container div.summary') 的结果为空
    • 我明白了,这是因为你的.container 标签坏了。简单的事情可能会更宽容。
    【解决方案2】:

    最后,我自己解决了。对于任何寻求解决方案的人,这就是我所做的。

    $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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-18
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-08
      • 1970-01-01
      相关资源
      最近更新 更多