1

以下は、サーバーが表示する予期しない警告メッセージです。

警告: DOMDocument::loadHTML() [domdocument.loadhtml]: ID page3 already defined in Entity, line: 25 in C:\Program Files\Zend\Apache2\htdocs\joom\templates\valueTemplate\updateRecord.php 行 74

.

上記の警告メッセージは、次のコードの実行時に生成されます。

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

.

HTML ドキュメントで ID として「page3」が重複して使用されていないため、このメッセージは予期しないものです。ただし、'page3' は、HTML ドキュメントで name 属性の値として何度も使用されます。例えば:

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

.

これに関する助けがあれば、心から感謝します。前もって感謝します。

4

2 に答える 2

2

アーティファクトは正しい。別の見方をすると、HTML 仕様と同様に、nameid属性が同じ名前空間を共有しているということです。したがって、これらの属性の 1 つで定義された識別子は、他の値のコレクションに表示されます。つまり、 を定義するとname="foo"、すべての属性またはすべての属性fooをリストしたときに表示されます。nameid

ソース: http://www.w3.org/TR/html401/struct/links.html#h-12.2.3

于 2010-07-28T00:38:25.040 に答える
2

これは予期される動作です。HTML では、属性「id」自体と同じように、属性「name」に id が導入されます(libxml の内部については何も知らないので、どのような状況で NULL になるaかはわかりません)。 elem.

/**
 * 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.clibxml ディストリビューション。

于 2010-07-28T00:24:08.860 に答える