-3

各テキスト ノードがデータベースに存在するかどうかを確認し、存在する場合は、その要素ノードにクラスを追加します。

私は次のようにしてみました:

function extractText($node) {
    if (XML_TEXT_NODE === $node->nodeType || XML_CDATA_SECTION_NODE === $node->nodeType) {

// am considering that Login is the word that exists in DB
            if ($node->nodeValue == "Login"): 
                $node->setAttribute("class", "translated");
                return $node->nodeName;
            endif;
        } else if (XML_ELEMENT_NODE === $node->nodeType || XML_DOCUMENT_NODE === $node->nodeType
                || XML_DOCUMENT_FRAG_NODE === $node->nodeType) {
            if ('script' === $node->nodeName || 'style' === $node->nodeName)
                return '';

        $text = '';
        foreach ($node->childNodes as $childNode) {
            $text .= extractText($childNode);
        }
        return $text;
    }
}

$doc = new DomDocument;
$doc->loadHTMLFile('test.html');

//var_dump(extractText($doc->getElementsByTagName('body')->item(0)));
echo extractText($doc->getElementsByTagName('body')->item(0));

しかし、エラーメッセージが表示されます。

致命的なエラー: 未定義のメソッド DOMText::setAttribute() の呼び出し

4

1 に答える 1

2

致命的なエラー:未定義のメソッドDOMText :: setAttribute()の呼び出し

さて、コードを見てみましょう。

if (XML_TEXT_NODE === $node->nodeType || XML_CDATA_SECTION_NODE === $node->nodeType) {
// am considering that Login is the word that exists in DB
    if ($node->nodeValue == "Login"): 
        $node->setAttribute("class", "translated");
        return $node->nodeName;
    endif;
} /* else ... */

テキストまたはCDATAノードのみを要求している場合は、テキストに属性...を設定しようとしています。これは機能しません。テキストノードは属性を持つことができません。

テキストを含む要素に到達し、そこに属性を追加する必要があります。DOMTextはDOMNodeを継承しているため、プロパティを調べて、おそらく要素を取り戻すことができます。parentNode

于 2012-12-18T10:48:40.160 に答える