Jam*_*ine 3 html php regex tags dom
在PHP中给出以下字符串:
$html = "<div>
<p><span class='test1 test2 test3'>text 1</span></p>
<p><span class='test1 test2'>text 2</span></p>
<p><span class='test1'>text 3</span></p>
<p><span class='test1 test3 test2'>text 4</span></p>
</div>";
Run Code Online (Sandbox Code Playgroud)
我只想要清空或删除任何包含"test2"的类,因此结果如下:
<div>
<p><span class=''>text 1</span></p>
<p><span class=''>text 2</span></p>
<p><span class='test1'>text 3</span></p>
<p><span class=''>text 4</span></p>
</div>
Run Code Online (Sandbox Code Playgroud)
如果你要删除元素:
<div>
<p>text 1</p>
<p>text 2</p>
<p><span class='test1'>text 3</span></p>
<p>text 4</p>
</div>
Run Code Online (Sandbox Code Playgroud)
我很高兴使用正则表达式或PHP Simple HTML DOM Parser之类的东西,但我不知道如何使用它.使用正则表达式,我知道如何找到元素,但不知道与它相关的特定属性,特别是如果有多个属性,如上面的例子.有任何想法吗?
该DOMDocument班是一个非常直接和易于理解的界面设计,以帮助您在一个类似DOM的时尚你的数据的工作.用xpath选择器查询你的DOM应该是更简单的任务:
// Build our DOMDocument, and load our HTML
$doc = new DOMDocument();
$doc->loadHTML($html);
// Preserve a reference to our DIV container
$div = $doc->getElementsByTagName("div")->item(0);
// New-up an instance of our DOMXPath class
$xpath = new DOMXPath($doc);
// Find all elements whose class attribute has test2
$elements = $xpath->query("//*[contains(@class,'test2')]");
// Cycle over each, remove attribute 'class'
foreach ($elements as $element) {
// Empty out the class attribute value
$element->attributes->getNamedItem("class")->nodeValue = '';
// Or remove the attribute entirely
// $element->removeAttribute("class");
}
// Output the HTML of our container
echo $doc->saveHTML($div);
Run Code Online (Sandbox Code Playgroud)