我目前正在开发一个 XML/HTML 解析器node.js
(如果您有兴趣:链接)。让我直奔主题:我需要知道我应该如何处理处理指令中的前导空格。这些应该相等吗?
<?asdf ?>
< ?asdf ?>
<? asdf ?>
< ? asdf ?>
我想严格的 XML 只会允许第一个(但是预期的行为是什么?我不想验证,我想接受尽可能多的构造),这更像是一个哲学问题。
提前致谢!
我目前正在开发一个 XML/HTML 解析器node.js
(如果您有兴趣:链接)。让我直奔主题:我需要知道我应该如何处理处理指令中的前导空格。这些应该相等吗?
<?asdf ?>
< ?asdf ?>
<? asdf ?>
< ? asdf ?>
我想严格的 XML 只会允许第一个(但是预期的行为是什么?我不想验证,我想接受尽可能多的构造),这更像是一个哲学问题。
提前致谢!
根据XML 规范,只允许第一个表示。我会说其他表示应该导致错误。
您可以添加一些预处理来清理无效结构(删除空格),然后将数据读取为 XML。
这个预处理器会在你的数据到达你的 XML 解析器之前清理你的数据——它可能是另一个程序。这样,如果输入数据有效一半,您的 XML 解析器将只获得有效的 XML(解析较少的特殊情况)。如果您的解析器仍然遇到错误,您会假定输入根本不是 XML 式的。
因此,例如在预处理过程中,数据将被更改,最终被解析为 XML:删除虚假空格(一个预处理器)→猜测结束标签(另一个预处理器)→解析为 XML
允许构造的问题由您的陈述回答,以尽可能多地接受。因为在这种情况下,您将删除 a 之后的所有空格<
,如果 a?
跟随,请再次删除空格,直到下一个单词 - 然后解析为 XML。
就个人而言,我不认为接受大多数构造是可取的。如果您的数据包含错误,则应照此处理。