PHP DOMDocument:对非嵌套结果进行分组

时间:2014-05-02 20:13:10

标签: php html parsing xpath domdocument

我遇到DOMDocument / XPath问题。 HTML(我无法控制)看起来像这样:

.. random html ..

<div class="separator"></div>
<div class="date">01-01-1900</div>

<div class="item"><div>1 HTML garbage</div></div>
<div class="item"><div>2 HTML garbage</div></div>


<div class="separator"></div>
<div class="date">12-12-2012</div>

<div class="item"><div>3 HTML garbage</div></div>
<div class="item"><div>4 HTML garbage</div></div>
<div class="item"><div>5 HTML garbage</div></div>
<div class="item"><div>6 HTML garbage</div></div>

.. more random html ...

我如何需要我的数据:

$result = array(
    '01-01-1900' => array(
        array('name' => '1 HTML garbage'),
        array('name' => '2 HTML garbage')
    ),
    '12-12-2012' => array(
        array('name' => '3 HTML garbage'),
        array('name' => '4 HTML garbage'),
        array('name' => '5 HTML garbage'),
        array('name' => '6 HTML garbage')
    )
);

由于深度可以改变,我无法使用浏览器控制台中的固定路径。 我如何按日期分组?现在我可以使用以下方法获取项目列表:

$xpath->query('//*[contains(concat(" ", normalize-space(@class), " "), " item ")]');

1 个答案:

答案 0 :(得分:0)

由于您使用的是php,因此您可以先获取所有日期并迭代这些日期以根据this未经测试的)获取项目

//../node[contains(@class,'item') and preceding-sibling::node[contains(text(),'12-12-2012')]]

12-12-2012作为搜索值。