【发布时间】:2010-11-21 09:43:35
【问题描述】:
我正在使用这个简单的 PHP HTML 解析器:http://simplehtmldom.sourceforge.net。是否可以用它来回显HTML规范的所有标签?
【问题讨论】:
-
你的意思是回显当前 HTML 文档中存在的所有标签,还是 HTML 规范中存在的所有 HTML 标签?
-
所有标签都存在于html规范中
我正在使用这个简单的 PHP HTML 解析器:http://simplehtmldom.sourceforge.net。是否可以用它来回显HTML规范的所有标签?
【问题讨论】:
给你:
$dom = new DOMDocument;
$dom->load('http://www.w3.org/2002/08/xhtml/xhtml1-transitional.xsd');
$xsns = 'http://www.w3.org/2001/XMLSchema';
$elements = array();
foreach ($dom->getElementsByTagNameNS($xsns, 'element') as $element) {
if ($element->hasAttribute('name')) {
echo $element->getAttribute('name');
$docs = $element->getElementsByTagNameNS($xsns, 'documentation');
foreach ($docs as $doc) {
echo "\t", $doc->nodeValue;
}
echo PHP_EOL;
}
}
上面的代码将输出XHTML1 Transitional(不是HTML)的架构定义(不是DTD)中的所有元素类型以及任何文档,例如
pre
content is "Inline" excluding
"img|object|applet|big|small|sub|sup|font|basefont"
它使用 PHP 的原生 DOM 扩展来做到这一点。 The DOM extension 在下面使用libxml,在速度方面优于 SimpleHtmlDom,并提供对标记的控制。 The DOM interface is a language agnostic W3C specification.
有关 DOM 扩展的替代方案,请参阅
不,该解析器是一个简单的 HTML 解析器,它没有解析 DTD 的能力,并且它用于处理 HTML 元素的内部逻辑没有公开(或者甚至以一种可以使以人类可读的形式呈现它的方式稍微表达)方便)。
【讨论】:
在文档中说
// Dumps the internal DOM tree back into string
$str = $html;
// Print it!
echo $html;
我认为 echo 应该是 $str 而不是 $html 但这就是文档所说的。
// Dumps the internal DOM tree back into string
$str = $html->save();
// Dumps the internal DOM tree back into a file
$html->save('result.htm');
希望这会有所帮助。
【讨论】: