PHP DOM遍历HTML个节点和子节点
PHP DOM traverse HTML nodes and childnode
我正在使用一些代码从 HTML 页面中挑选出所有 <td>
标签:
$dom = new DOMDocument;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('td') as $node) {
$array_data[ ] = $node->nodeValue;
}
这将数据很好地存储在我的数组中。
正在查看的html数据是:
<tr>
<td>DATA 1</td>
<td><a href="12345">DATA 2</a></td>
<td>DATA 3</td>
</tr>
$array_data
returns:
Array([0])=>DATA 1 [1]=>DATA 2 [2]=> DATA 3)
我想要的输出是从与页面上的 关联的 <a>
标记中获取代码。期望的输出:
Array([0])=>DATA 1 [1]=>12345 [2]=>DATA 2 [3]=> DATA 3)
我认为 <a>
会被称为子节点,我对使用 DOM 很陌生,如果这看起来是个愚蠢的问题,我很抱歉。
我读过 link:
Using PHP dom to get child elements
我用这个代码来挑选 href:
foreach ($dom->getElementsByTagName('td') as $node) {
foreach ($node->getElementsByTagName('a') as $node){
$link = $node->getAttribute('href');
echo '<br>';
echo $link;
}
$array_data[ ] = $node->nodeValue;
}
对于其他阅读 material 的任何帮助或指示将不胜感激!
谢谢
您应该检查 td
有 a
child。 Select 锚标记使用 getElementsByTagName()
并使用 length
property. If the td
has anchor in child, use getAttribute()
检查选择是否包含内容以获取它的 href
属性。
$dom = new DOMDocument;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('td') as $node) {
$nodeAnchor = $node->getElementsByTagName("a");
if ($nodeAnchor->length)
$array_data[] = $nodeAnchor->item(0)->getAttribute("href");
$array_data[] = $node->nodeValue;
}
见demo
我正在使用一些代码从 HTML 页面中挑选出所有 <td>
标签:
$dom = new DOMDocument;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('td') as $node) {
$array_data[ ] = $node->nodeValue;
}
这将数据很好地存储在我的数组中。
正在查看的html数据是:
<tr>
<td>DATA 1</td>
<td><a href="12345">DATA 2</a></td>
<td>DATA 3</td>
</tr>
$array_data
returns:
Array([0])=>DATA 1 [1]=>DATA 2 [2]=> DATA 3)
我想要的输出是从与页面上的 关联的 <a>
标记中获取代码。期望的输出:
Array([0])=>DATA 1 [1]=>12345 [2]=>DATA 2 [3]=> DATA 3)
我认为 <a>
会被称为子节点,我对使用 DOM 很陌生,如果这看起来是个愚蠢的问题,我很抱歉。
我读过 link: Using PHP dom to get child elements
我用这个代码来挑选 href:
foreach ($dom->getElementsByTagName('td') as $node) {
foreach ($node->getElementsByTagName('a') as $node){
$link = $node->getAttribute('href');
echo '<br>';
echo $link;
}
$array_data[ ] = $node->nodeValue;
}
对于其他阅读 material 的任何帮助或指示将不胜感激!
谢谢
您应该检查 td
有 a
child。 Select 锚标记使用 getElementsByTagName()
并使用 length
property. If the td
has anchor in child, use getAttribute()
检查选择是否包含内容以获取它的 href
属性。
$dom = new DOMDocument;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('td') as $node) {
$nodeAnchor = $node->getElementsByTagName("a");
if ($nodeAnchor->length)
$array_data[] = $nodeAnchor->item(0)->getAttribute("href");
$array_data[] = $node->nodeValue;
}
见demo