Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检测JavaScript中使用的XML或SGML解析器_Javascript_Html_Parsing_Xhtml - Fatal编程技术网

检测JavaScript中使用的XML或SGML解析器

检测JavaScript中使用的XML或SGML解析器,javascript,html,parsing,xhtml,Javascript,Html,Parsing,Xhtml,HTML是SGML的一个子集 XHTML是XML的一个子集 两者都使用单独的解析器 假设HTML文档被正确地用作text/HTML,而XHTML应用程序被正确地用作application/XHTML+xml,那么是否可以检测使用哪个解析器来呈现页面?如果可以,如何检测 我完全明白我的要求。请不要坚持问我为什么要这样做 我不希望收到暗示我不使用一种或另一种语言的答案。这是为了避免争论,并帮助产生一个我可以使用的答案 [这取代了我原来的答案。我最初的想法是利用innerHTML行为的差异。虽然它在

HTML是SGML的一个子集

XHTML是XML的一个子集

两者都使用单独的解析器

假设HTML文档被正确地用作
text/HTML
,而XHTML应用程序被正确地用作
application/XHTML+xml
,那么是否可以检测使用哪个解析器来呈现页面?如果可以,如何检测

  • 我完全明白我的要求。请不要坚持问我为什么要这样做

  • 我不希望收到暗示我不使用一种或另一种语言的答案。这是为了避免争论,并帮助产生一个我可以使用的答案


[这取代了我原来的答案。我最初的想法是利用innerHTML行为的差异。虽然它在IE9、Firefox和Chrome中运行良好,但在Opera中却失败了,Opera似乎对innerHTML使用HTML解析器,甚至对充当
应用程序/xhtml+xml的页面也是如此


区分XML文档和HTML文档的方法不多。然而,一种方法是利用HTML和XML之间的案例处理差异

特别是,这些人的行为各不相同。在HTML解析文档中,
标记名
的元素名将强制为大写,而在XML解析文档中则不会。因此,我们可以测试
document.createElement(“div”).tagName==“div”
,这将根据文档的解析方式给出不同的结果

请参阅此测试用例:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
    <head>      
        <title>Test Case</title>
        <script>
            window.onload = function() {
              document.getElementById("result")
                .appendChild(document.createTextNode(
                  (document.createElement("div").tagName == "DIV") 
                    ? "HTML parser" : "XML parser"));
            }
        </script>
    </head>
    <body>
        <p id="result"></p>
    </body>
</html>

测试用例
window.onload=函数(){
document.getElementById(“结果”)
.appendChild(document.createTextNode(
(document.createElement(“div”)。标记名==“div”)
?“HTML解析器”:“XML解析器”);
}

在行动中看到它:

  • HTML解析:
  • XML解析:

这些可能不是您唯一的选择-浏览器可能至少有一种其他模式用于标记汤。另外,您为什么要这样做?似乎仅仅使用一种类型的格式良好的文档就足够了。HTML不再是SGML的应用程序。当前的HTML标准定义了不同的解析规则。。。引用:“此外,由于本规范中定义的两种创作格式都不是SGML的应用程序,因此验证SGML系统也不能构成一致性检查器。”由此进一步证明:“为了与现有内容和以前的规范兼容,本规范描述了两种创作格式:一种基于XML(被称为XHTML语法)和一种使用受SGML启发的自定义格式(被称为HTML语法)“如果你不明白,请先澄清”我不明白为什么你有一个“JavaScript:”标题前缀,而我们有一个[JavaScript]tag.看起来像是在主题中,虽然直到现在还没有机会上网;明天我们将查看它并让您知道它是如何工作的,谢谢!太棒了!我测试了它并感谢您放弃innerHTML(我绝对不喜欢它,因为它不能与DOM正常工作).被接受为答案并竖起大拇指,谢谢!