Мы можем использовать свойство childNodes и функцию item() для поиска дочернего элемента на основе родительского узла, однако, если путь между родительским и дочерним элементами слишком длинный, может быть слишком много childNodes-> item(), который необходим для записи, например, PHP, перечисленных ниже, я хочу найти содержимое внутри тега P, на основе таблицы узлов, вы можете проверить переменные $ предложения, я не знаю, является ли это единственным способ справиться с такой ситуацией, есть ли лучший способ сделать это?Как найти дочерний элемент на основе определенного узла в PHP?
HTML
<table>
<tr>
<td>
<p>Sentence 1</p>
</td>
<tr>
<tr>
<td>
<a>Click 1</a>
</td>
<tr>
</table>
<table>
<tr>
<td>
<p>Sentence 2</p>
</td>
<tr>
<tr>
<td>
<a>Click 2</a>
</td>
<tr>
</table>
Вот мой PHP код
$content = file_get_contents('./a.html');
$dom = new \domDocument;
@$dom->loadHTML($content);
$dom->preserveWhiteSpace = false;
$xpath = new \DOMXPath($dom);
$table_list = $xpath->query('//table');
foreach($table_list as $k=>$table_node){
$sentence1 = $table_node->childNodes->item(0)->childNodes->item(0)->childNodes->item(0)->nodeValue;
}
Мне нужно получить значение внутри P тега, вы можете увидеть код действительно долго, чтобы просто получить значение внутри P тег, есть ли способ я могу сократить код, например, с помощью
$sentence1 = $table_node->FIND('//tr/td/p')
Вместо того, чтобы писать childNodes-> пункт () неоднократно?
Запрос xpath позволяет указать узел контекста. например 'foreach ($ xpath-> query ('// table') как $ table) {foreach ($ xpath-> query ('// p', $ table) {...}}', а внутренний запрос будет начните поиск на каждом конкретном '
ответ
источник
2015-05-07 20:31:49 Igor
Если вы меня правильно поняли, вы можете просто сделать это:
$xpath->query('/table//p')
. Он вернет все элементы p, которые являются прямым или косвенным дочерним элементом элемента таблицы в корне.источник
2015-05-07 21:04:51 laszlovl
Смежные вопросы