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