我想删除包含引用的类“refs”。从我获取内容的页面(http://www.sacred-destinations.com/mexico/palenque)看起来像:
<div class="col-sm-6 col-md-7" id="essay">
<section class="refs">
</section>
</div><!-- end #essay -->
现在我没有得到如何删除这个'refs'类,因为它被包含在“section”中,就像某些东西一样。 这是我到目前为止所做的事情......
<?php
$url="http://www.sacred-destinations.com/mexico/palenque";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
$html = curl_exec($ch);
curl_close($ch);
$newDom = new domDocument;
libxml_use_internal_errors(true);
$newDom->loadHTML($html);
libxml_use_internal_errors(false);
$newDom->preserveWhiteSpace = false;
$newDom->validateOnParse = true;
$sections = $newDom->saveHTML($newDom->getElementById('essay'));
$text=$sections->find('<section class="refs">');
$result=removeClass($text);
echo $result;
?>
答案 0 :(得分:0)
DOMDocument没有find()方法,你必须使用带有XPath表达式的DOMXPath :: evaluate()。
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($html);
libxml_use_internal_errors(false);
$dom->preserveWhiteSpace = false;
$xpath = new DOMXPath($dom);
$expression =
'//div[
@id="essay"
]
/section[
contains(
concat(" ", normalize-space(@class), " "), " refs "
)
]';
foreach ($xpath->evaluate($expression) as $section) {
$section->removeAttribute('class');
}
echo $dom->saveHtml();
类属性可以包含多个值,例如classOne classTwo
。使用normalize-space()
时,空格将缩减为字符串内的单个空格(开始和结束删除)。 concat()
在开头和结尾添加空格。这样可以避免将类名作为另一个类名的一部分进行匹配。
在示例中,将删除整个类属性。要修改它,您可以使用DOMElement :: getAttribute()读取它并使用字符串函数来更改它。
以下是几个基于DOM的库,可以使HTML操作更容易。