0

我目前正在开发一个 XML/HTML 解析器node.js(如果您有兴趣:链接)。让我直奔主题:我需要知道我应该如何处理处理指令中的前导空格。这些应该相等吗?

  1. <?asdf ?>
  2. < ?asdf ?>
  3. <? asdf ?>
  4. < ? asdf ?>

我想严格的 XML 只会允许第一个(但是预期的行为是什么?我不想验证,我想接受尽可能多的构造),这更像是一个哲学问题。

提前致谢!

4

1 回答 1

0

根据XML 规范,只允许第一个表示。我会说其他表示应该导致错误。

您可以添加一些预处理来清理无效结构(删除空格),然后将数据读取为 XML。

这个预处理器会在你的数据到达你的 XML 解析器之前清理你的数据——它可能是另一个程序。这样,如果输入数据有效一半,您的 XML 解析器将只获得有效的 XML(解析较少的特殊情况)。如果您的解析器仍然遇到错误,您会假定输入根本不是 XML 式的。

因此,例如在预处理过程中,数据将被更改,最终被解析为 XML:删除虚假空格(一个预处理器)→猜测结束标签(另一个预处理器)→解析为 XML

允许构造的问题由您的陈述回答,以尽可能多地接受。因为在这种情况下,您将删除 a 之后的所有空格<,如果 a?跟随,请再次删除空格,直到下一个单词 - 然后解析为 XML。

就个人而言,我不认为接受大多数构造是可取的。如果您的数据包含错误,则应照此处理。

于 2011-12-11T13:05:12.227 回答