1

以下是服务器给我的意外警告消息:

警告:DOMDocument::loadHTML() [domdocument.loadhtml]: ID page3 已在 Entity 中定义,第 25 行位于 C:\Program Files\Zend\Apache2\htdocs\joom\templates\valueTemplate\updateRecord.php 第 74 行

.

执行以下代码时会生成上述警告消息:

$html = new DOMDocument();
$html->loadHTML( $fetchedData[ 'content' ] );

.

该消息出乎意料,因为在 HTML 文档中没有重复使用“page3”作为 ID。然而,'page3' 在 HTML 文档中被多次用作 name 属性的值。例如:

<li id="index00025" name="page3" class="fooBar"></li>

.

对此的任何帮助将不胜感激。提前致谢。

4

2 回答 2

2

这是预期的行为。在HTML中,属性“name”引入了一个id,就像属性“id”本身一样,以防元素是a(我对libxml内部一无所知,所以我不知道在什么情况下elem可以为NULL) .

/**
 * xmlIsID:
 * [...]
 *
 * Determine whether an attribute is of type ID. In case we have DTD(s)
 * then this is done if DTD loading has been requested. In the case
 * of HTML documents parsed with the HTML parser, then ID detection is
 * done systematically.
 * [...]
 */
int
xmlIsID(xmlDocPtr doc, xmlNodePtr elem, xmlAttrPtr attr) {
    [...]
    } else if (doc->type == XML_HTML_DOCUMENT_NODE) {
        if ((xmlStrEqual(BAD_CAST "id", attr->name)) ||
        ((xmlStrEqual(BAD_CAST "name", attr->name)) &&
        ((elem == NULL) || (xmlStrEqual(elem->name, BAD_CAST "a")))))
        return(1);
    return(0);    
    }
    [...]
}

来源:valid.c关于 libxml 发行版。

于 2010-07-28T00:24:08.860 回答
2

Artefacto 是正确的。另一种看待它的方式——正如 HTML 规范所做的那样——是nameandid属性共享相同的命名空间。因此,在其中一个属性中定义的标识符显示在另一个属性的值集合中,即,如果您定义 a name="foo"foo则在您列出所有name属性或所有id属性时将显示。

来源:http ://www.w3.org/TR/html401/struct/links.html#h-12.2.3

于 2010-07-28T00:38:25.040 回答