RelaxNG期待一个命名空间,我不知道为什么

RelaxNG is expecting a namespace and I don't know why

提问人:Mike Robinson 提问时间:8/4/2017 最后编辑:C. M. Sperberg-McQueenMike Robinson 更新时间:10/22/2017 访问量:58

问:

我正在构建一个像这样的XHTML文档(在PHP中):

$html = <<<"HEREDOC"
<!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>
</head>
<body>
$html
</body>
</html>
HEREDOC;

...而且,正如你所看到的,我认为我正确地指定了一切。但是RelaxNG(DOMDocument::RelaxNGValidate)似乎并不这么认为:

Error 15: Expecting a namespace for element html on line 2

我在这里错过了什么?

php 验证 xhtml relaxng

评论

0赞 Mike Robinson 8/4/2017
当 简化为 并向 中添加一个强制块时,“html5.validator.nu”声明生成的 HTML 有效由于我调用的是PHP对象的方法,因此我当然在该对象中查找可能相关的选项,但到目前为止还没有找到。<!DOCTYPE><!DOCTYPE html><TITLE><HEAD>DOMDocument
0赞 Mike Robinson 8/4/2017
现在我完全糊涂了!将出现相同的消息,即使文档的第一个节点不是标签,也始终显示 。它打印文档的第一个节点的行号 *(例如,如果我删除前三行,以 开头,并在其上方添加四个空行,则消息将引用“第 5 行”,并且仍然会说 ,不是 。因此,它似乎明确无误地抱怨文档中的某些内容,而不是(我认为)语法,但该消息现在对我来说根本没有意义。... element html ...<html><body>element htmlelement body
1赞 C. M. Sperberg-McQueen 10/22/2017
如果在对您认为是输入的内容进行重大更改时错误消息没有更改,有时原因是这实际上不是输入。您没有展示如何从字符串 HEREDOC 创建 DOMDocument 对象;你有多大把握它达到了你的预期?如果调用 DOM 方法来检查根元素的本地名称和命名空间,它们会显示什么?

答: 暂无答案