我试图删除DomDocument
和str_ireplace
功能,所有span
标签都具有包含language-indicator
的class
属性,这些属性通常是括号中的单词,包括:(d)
,(en)
。
是但是的问题是,它只删除括号中的单词:d
,en
。AND不删除括号本身:()
.
libxml_use_internal_errors(true);
$parser = new DOMDocument();
$parser->loadHTMLFile("https://fr.wikipedia.org/wiki/Mark_Zuckerberg");
$get_span_tags = $parser->getElementsByTagName("span");
foreach ($get_span_tags as $get_span_tag) {
if (stripos($get_span_tag->getAttribute('class'), "indicateur-langue") !== false) {
$get_infoxbox_span = $parser->saveHTML($get_span_tag);
$wikipediaInfoboxTable = str_ireplace($get_infoxbox_span, "", $wikipediaInfoboxTable);
}
}
echo $wikipediaInfoboxTable;
所以我怎么能修改我的代码也删除括号和它们包含的单词,因为目前的单词被删除,括号()
不是吗?
谢谢你的帮助。
我本以为使用XPath
显式地标识感兴趣的节点会比最初的方法更容易。而不是使用str_replace
等,你可以完全从DOM中删除span元素?!
libxml_use_internal_errors( true );
$dom=new DOMDocument();
$dom->loadHTMLFile( 'https://fr.wikipedia.org/wiki/Mark_Zuckerberg' );
# create the XPath object
$xp=new DOMXPath( $dom );
# create the query to find spans with class as specified
$expr='//span[ @class="indicateur-langue" ]';
# query the dom and iterate through results
$col=$xp->query( $expr );
if( $col && $col->length > 0 ){
foreach( $col as $node ){
$node->parentNode->removeChild( $node );
}
#create a copy of the modified HTML
$html=$dom->saveHTML();
# show the result?
printf('<textarea cols=100 rows=20>%s</textarea>', print_r( $html ,true ) );
}