createContextualFragment()是否应支持处理XML声明?
关于createContextualFragment处理带XML声明的XML报错的问题解答
这可不是什么Bug哦,主要是这两个API的设计目标和解析规则完全不一样导致的:
DOMParser:从名字就能看出来,它就是专门为解析XML和HTML文档而生的,完全兼容XML的语法规范,所以带
<?xml version="1.0" encoding="UTF-8"?>这类XML声明的文档,它能正确识别并处理,自然不会报错。createContextualFragment:这个API是Range接口的方法,它的核心作用是把HTML字符串转换成DOM片段,解析逻辑完全遵循HTML的规范。而XML声明在HTML语法里是不被认可的非法结构,所以当它碰到
<?xml...?>这种HTML里没有的语法时,就会抛出SyntaxError: An invalid or illegal string was specified这个错误。
如果你的场景必须要用createContextualFragment来处理内容,那可以先做个简单的预处理:把开头的XML声明去掉之后再传入。举个例子:
原XML内容:
<?xml version="1.0" encoding="UTF-8"?> <root> <item>测试内容</item> </root>
预处理后去掉XML声明,变成:
<root> <item>测试内容</item> </root>
再传入createContextualFragment就可以正常运行了。
当然,要是你的核心需求就是处理XML文档,那优先用DOMParser肯定是更稳妥的选择,毕竟它是专门适配XML场景的工具。
内容的提问来源于stack exchange,提问作者spbks
相关产品推荐
相关产品推荐

