- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一部分 html 的结构不完整。示例:
<div id='notrequired'>
<div>
<h3>Some examples :-)</h3>
STL is a library, not a framework.
</div>
</p>
</a>
<a target='_blank' href='http://en.wikipedia.org/wiki/Library_%28computing%29'>Read more</a>;
</div>
<a target='_blank' href='http://en.wikipedia.org/wiki/Library_%28computing%29'>Read more</a>";
正如您在这里注意到的,我有意想不到的 </p>
和 </a>
标签。
我尝试了一段代码来删除 <div id='notrequired'>
它可以工作,但无法精确处理。
这是代码片段:
function DOMRemove(DOMNode $from) {
$from->parentNode->removeChild($from);
}
$dom = new DOMDocument();
@$dom->loadHTML($text); //$text contains the above mentioned HTML
$selection = $dom->getElementById('notrequired');
if($selection == NULL){
$text = $dom->saveXML();
}else{
$refine = DOMRemove($selection);
$text = $dom->saveXML($refine);
}
问题是$dom->saveXML
保存为 HTML 内容:
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<body>
<a target="_blank" href="http://en.wikipedia.org/wiki/Library_%28computing%29">Read more</a>
</body>
</html>
我只需要:
<a target='_blank' href='http://en.wikipedia.org/wiki/Library_%28computing%29'>Read more</a>
而不是 <HTML>
和 <BODY>
标签。
我错过了什么?还有其他更好的方法吗?
最佳答案
好的..我想我想出了一个解决方案。方法可能不正确,但它确实有效!
作为Hakre指出它与 innerHTML in PHP's DomDocument? 完全相同,它不是完全重复的,但它给了我使用这个想法的提示。感谢您的建议。
它帮助我制定了以下解决方案:
function DOMRemove(DOMNode $from) {
$from->parentNode->removeChild($from);
}
function DOMinnerHTML($element)
{ echo "Ashwin";
$innerHTML = "";
$children = $element->childNodes;
foreach ($children as $child)
{
$tmp_dom = new DOMDocument();
$tmp_dom->appendChild($tmp_dom->importNode($child, true));
$innerHTML.=trim($tmp_dom->saveHTML());
}
return $innerHTML;
}
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
@$dom->loadHTML($test);
$a = $dom->getElementById('step');
$b = DOMRemove($a);
$c = $dom->saveXML($b);
$domTable = $dom->getElementsByTagName("body");
foreach ($domTable as $tables)
{
$x = DOMinnerHTML($tables);
echo $x;
}
如果输入是:
<div id='step'>
<div >
<h3>Some examples :-(</h3>
Blah blah blah...
</div> </p>
</a>
<a target='_blank' href='#'>Read more</a>;
</div>
<div id='step2'>
<div>
<h3>Some examples :-) :-D</h3>
Blah2 blah2 blah2...
</div> </p> </a>
</div>
<a target='_blank' href='#'>Read more</a>
<a target='_blank' href='#'>Read more</a>
<a target='_blank' href='#'>Read more</a>
如预期的那样,输出是:
<div id="step2">
<div>
<h3>Some examples :-) :-D</h3>
Blah2 blah2 blah2...
</div>
</div>
<a target="_blank" href="#">Read more</a>
<a target="_blank" href="#">Read more</a>
<a target="_blank" href="#">Read more</a>
该解决方案有效但可能不是最优的。 有什么想法吗?
关于php - 删除 DOMDocument::saveXML 中的 <html> 和 <head> 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12811604/
尝试解析 xml 文件时,我总是遇到此错误。 重现它的简单脚本: doc <- xmlRoot(xmlTreeParse("http://www.stat.purdue.edu/~mdw/490M/c
本文整理了Java中org.codehaus.cargo.util.XmlUtils.saveXml()方法的一些代码示例,展示了XmlUtils.saveXml()的具体用法。这些代码示例主要来源于
我写了一个简短的 PHP 脚本来抓取现有的 XML 文件,找到一个节点并将其更改为新值。新值必须包装到 CDATA block 中。这工作正常,但是 <> 字符被替换为它们各自的 HTML 实体。这会
我正在使用 PHP 从网页中获取所有“脚本”标签,然后在 之后附加文本,该文本并不总是有效的 html。因为它并不总是有效的标记,所以我不能只使用 appendchild/replacechild
我有一部分 html 的结构不完整。示例: Some examples :-) STL is a library, not a framework.
我是一名优秀的程序员,十分优秀!