其他分享
首页 > 其他分享> > domdocument-消息“未找到错误”的未捕获异常“ DOMException”

domdocument-消息“未找到错误”的未捕获异常“ DOMException”

作者:互联网

基本上,我正在为CMS写一个模板系统,我想拥有一个模块化的结构,其中涉及到人们在标签中放置的内容,例如:

< module name =“ news” />或< include name =“ anotherTemplateFile” />然后我想在我的php中找到并替换为动态html.

这里的某个人将我指向DOMDocument,但是我已经遇到了一个问题.

我正在尝试查找所有< include />标签在我的模板中,并用一些简单的html替换它们.这是我的模板代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>CMS</title>
<include name="head" />
</head>

<body>

<include name="header" />

<include name="content" />

<include name="footer" />

</body>
</html>

这是我的PHP:

$template = new DOMDocument();
$template->load("template/template.tpl");

foreach( $template->getElementsByTagName("include") as $include ) {
    $element = '<input type="text" value="'.print_r($include, true).'" />';
    $output = $template->createTextNode($element);
    $template->replaceChild($output, $include);
}

echo $template->saveHTML();

现在,我收到致命错误,消息为“未找到错误”,但未捕获到异常“ DOMException”.

我查了一下,这似乎是因为我的< include />标记不一定是$template的直接子代,而不替换它们.

如何独立于后裔更换它们?

谢谢

汤姆

编辑

基本上我有各种各样的头脑.如果我为PHP做类似的事情,我会看到它正在尝试做我想做的事情:

$template = new DOMDocument();
    $template->load("template/template.tpl");

    foreach( $template->getElementsByTagName("include") as $include ) {
        $element = '<input type="text" value="'.print_r($include, true).'" />';
        $output = $template->createTextNode($element);
        // this line is different:
        $include->parentNode->replaceChild($output, $include);
    }

    echo $template->saveHTML();

然而,似乎只改变了1在< body>中的出现.我的HTML …当我有3.:/

解决方法:

这是您的DOMDocument->加载问题,请尝试

$template->loadHTMLFile("template/template.tpl"); 

但是您可能需要给它一个.html扩展名.

这正在寻找一个html或xml文件.另外,每当将DOMDocument与html一起使用时,最好使用libxml_use_internal_errors(true);.在加载调用之前.

好的,这项工作:

foreach( $template->getElementsByTagName("include") as $include ) {
     if ($include->hasAttributes()) {
     $includes[] = $include;
     }
     //var_dump($includes);
 }
 foreach ($includes as $include) {
            $include_name = $include->getAttribute("name");
        $input = $template->createElement('input');
$type = $template->createAttribute('type');
$typeval = $template->createTextNode('text');
$type->appendChild($typeval);
$input->appendChild($type);
$name = $template->createAttribute('name');
$nameval = $template->createTextNode('the_name');
$name->appendChild($nameval);
$input->appendChild($name);
$value = $template->createAttribute('value');
$valueval = $template->createTextNode($include_name);
$value->appendChild($valueval);
$input->appendChild($value);
if ($include->getAttribute("name") == "head") {
       $template->getElementsByTagName('head')->item(0)->replaceChild($input,$include);
}
else {
        $template->getElementsByTagName("body")->item(0)->replaceChild($input,$include);
}
        }
        //$template->load($nht);
        echo $template->saveHTML();

标签:domdocument,php
来源: https://codeday.me/bug/20191102/1994420.html