检查每个文本节点是否存在于DataBase中,如果确实存在,则将类添加到其Element节点。
我尝试过以下方式:
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()
答案 0 :(得分: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
属性,可能获取元素。