domxpath - 从第二个ul中提取li标签

jma*_*sen 3 php domxpath

我试图从下面提取第二个ul的li标签.不幸的是,html中没有类或id来帮助

<ul>
    <li>Some text</li>
    <li>Some text</li>
    <li>Some text</li>
</ul>

<ul>
    <li>Some more text</li>
    <li>Some more text</li>
    <li>Some more text</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

我试过(实际上是一些事情):

    $ul = $xpath->query('//ul')->item(1);
    $query = '/li';
    $lis = $xpath->evaluate($query, $ul);
Run Code Online (Sandbox Code Playgroud)

想到这将得到第二个ul,然后我可以从那里提取.它确实让我得到了第二个ul的html,但我显然误解了` - >评价的东西?因为我的李是李的全部,而不仅仅是第二次.

hek*_*mgl 5

您可以使用XPath直接访问它们:

$xpath->query('//ul[2]/li');
Run Code Online (Sandbox Code Playgroud)

例:

$html = <<<EOF
<ul>
    <li>Some text</li>
    <li>Some text</li>
    <li>Some text</li>
</ul>

<ul>
    <li>Some more text</li>
    <li>Some more text</li>
    <li>Some more text</li>
</ul>
EOF;

$doc = new DOMDocument();
$doc->loadHTML($html);

$selector = new DOMXpath($doc);

// iterate through them...
foreach($selector->query('//ul[2]/li') as $li) {
    echo $li->nodeValue . PHP_EOL;
}
Run Code Online (Sandbox Code Playgroud)