simple_html_dom 解析器:过滤找到标记
simple_html_dom parser : filter found tag
我想解析结构如下的代码:
<p class=class1>
<i>.</i>
<b>..</b>
<a class=class2></a>
</p>
我需要获取 <p>
的全部内容,但只需要不带 <a>
标签。我需要保留所有其他标签,例如 <i>
或 <b>
我该怎么做?
现在我只有这段代码:
$content = $page->find('p[class=class1]');
foreach($content as $text)
{
$inner=$text->innertext();
}
它能够找到带有 <a>
标签的全部内容。并且
您可以循环子节点并检查 nodeName()
。如果那是 a
,您可以将 outertext
设置为空字符串:
这样试试:
$data = <<<DATA
<p class=class1>
content
<div>test</div>
<i>.</i>
<b>..</b>
<a class=class2></a>
</p>
DATA;
$html = str_get_html($data);
foreach($html->find('p.class1') as $element) {
foreach ($element->children as $child) {
if ($child->nodeName() === "a") {
$child->outertext = '';
}
}
}
echo $html->save();
那会给你:
<p class=class1> content <div>test</div> <i>.</i> <b>..</b> </p>
或者如果您想删除所有(嵌套的)锚点:
foreach ($html->find('p.class1 a') as $element) {
$element->outertext = '';
}
我想解析结构如下的代码:
<p class=class1>
<i>.</i>
<b>..</b>
<a class=class2></a>
</p>
我需要获取 <p>
的全部内容,但只需要不带 <a>
标签。我需要保留所有其他标签,例如 <i>
或 <b>
我该怎么做?
现在我只有这段代码:
$content = $page->find('p[class=class1]');
foreach($content as $text)
{
$inner=$text->innertext();
}
它能够找到带有 <a>
标签的全部内容。并且
您可以循环子节点并检查 nodeName()
。如果那是 a
,您可以将 outertext
设置为空字符串:
这样试试:
$data = <<<DATA
<p class=class1>
content
<div>test</div>
<i>.</i>
<b>..</b>
<a class=class2></a>
</p>
DATA;
$html = str_get_html($data);
foreach($html->find('p.class1') as $element) {
foreach ($element->children as $child) {
if ($child->nodeName() === "a") {
$child->outertext = '';
}
}
}
echo $html->save();
那会给你:
<p class=class1> content <div>test</div> <i>.</i> <b>..</b> </p>
或者如果您想删除所有(嵌套的)锚点:
foreach ($html->find('p.class1 a') as $element) {
$element->outertext = '';
}