Как получить несколько данных из запроса xpath?

Это HTML-страница (test.html)

<div id = 'mainid'>
<div id = 'subid'>
Name: ABC
</div>
<div id = 'subid'>
Country: USA
</div>
<div id = 'subid'>
Date of birth: 15 Feb 1985
</div>
</div>
<div id = 'mainid'>
<div id = 'subid'>
Name: Jisan
</div>
<div id = 'subid'>
Country: Japan
</div>
<div id = 'subid'>
Date of birth: 15 Feb 1985
</div>
</div>
<div id = 'mainid'>
<div id = 'subid'>
Name: Mr Barman
</div>
<div id = 'subid'>
Country: Canada
</div>
<div id = 'subid'>
Date of birth: 15 Feb 1985
</div>
</div>

Код PHP здесь

$file = $DOCUMENT_ROOT. "test.html";
$doc = new DOMDocument();
$doc->loadHTMLFile($file);

$xpath = new DOMXpath($doc);

$Querys = $xpath->query("*//div[@id='mainid']");
foreach ($Querys as $Querys) {
echo $Name  = Please help me about this code;
echo $Country   = Please help me about this code;
echo $DOB   = Please help me about this code;
}

ПРИМЕЧАНИЕ: я хочу получить такой результат

Name: ABC, Country: USA, Date of birth: 15 Feb 1985.
Name: Jisan, Country: Japan, Date of birth: 15 Feb 1985.
Name: Mr Barman, Country: Canada, Date of birth: 15 Feb 1985.

0

Решение

Один из подходов заключается в использовании параметра contextnode для DOMXPath :: query для выполнения подзапроса для каждого из элементов mainid для дочерних subids. Что-то вроде этого:

$mainElements = $xpath->query("*//div[@id='mainid']");
foreach ($mainElements as $mainElement) {
$subElements = $xpath->query("div[@id='subid']", $mainElement);

if ($subElements && $subElements->length == 3) {
$Name = trim($subElements[0]->nodeValue);
$Country = trim($subElements[1]->nodeValue);
$DOB = trim($subElements[2]->nodeValue);
echo "$Name, $Country, $DOB\n";
} else {
echo "Invalid number of sub-elements.\n";
}
}

Обратите внимание, что вызовы обрезки необходимы, иначе в результате вы получите все пробелы из исходного документа.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]