Как отсканировать DT и DD DL, находящиеся под div, с помощью DOMparser / Xpath - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь получить DT и DD для DL, которые находятся в классе, и пытаюсь поместить их в foreach.Но столкнувшись с некоторыми неприятностями,

<dl class="c-explain2">
        <dt>所在地</dt>
                <dd>
                    大阪府大阪市 北区天満1丁目25番1(地番)
                        <br>

Вот мои коды;

$DOMParser = new \DOMDocument();
$DOMParser->loadHTML($html);
$xpath = new \DOMXPath($DOMParser);

$classname="c-explain2";
$getAllTable = $xpath->query("//dl[contains(@class, '$classname')]//");

foreach($getAllTable as $table){
            $allProperties = [];

            $table->getElementsByTagName('dt')[0]->nodeValue;

            $value = $table->getElementsByTagName('dd')[0]->nodeValue;
            $allProperties[] = [
                    'property' => $property, 
                    'value'=> $value];
            }
                $insertData[$start_id] = $allProperties;
                $MyTable = true; 

Как получить те dt и dd, после этого хотите поместить их в массив.Любая помощь?Спасибо.

1 Ответ

0 голосов
/ 03 октября 2018

Есть проблема с вашим выражением XPath, оно должно быть "//dl[@class='$classname']"

Также похоже, что вы никогда не назначаете $property в своем цикле.Попробуйте это:

<?php
$html = <<<END
<dl class="c-explain2">
        <dt>所在地</dt>
        <dd>大阪府大阪市 北区天満1丁目25番1(地番</dd>
</dl>
END;

$DOMParser = new \DOMDocument();
$DOMParser->loadHTML($html);
$xpath = new \DOMXPath($DOMParser);

$classname   = "c-explain2";
$getAllTable = $xpath->query("//dl[@class='$classname']");

foreach ($getAllTable as $table)
{
    $allProperties = [];

    $property = $table->getElementsByTagName('dt')[0]->nodeValue;

    $value           = $table->getElementsByTagName('dd')[0]->nodeValue;
    $allProperties[] = [
        'property' => $property,
        'value' => $value
    ];
}
...