【问题标题】:Will pushing data through an XML parser perform validation acording to this specification?通过 XML 解析器推送数据是否会根据本规范执行验证?
【发布时间】:2020-07-26 10:24:51
【问题描述】:

我正在开发一个系统,该系统声明这是唯一允许的输入:

The following Unicode characters are allowed:
#x9 | #xA | #xD | #x20 to #xD7FF | #xE000 to #xFFFD | #x10000 to #x10FFFF
Any characters not included in this list will be rejected. 
For more information, see the http://www.w3.org/TR/REC-xml/#charsets

我需要验证我的数据以符合上面给出的规范。

我开始编写代码来逐个字符地评估我的数据,然后我突然想到这可能与 XML 允许的数据完全相同。

所以我想,不如直接将数据推送到 XML 解析器中,如果没有无效令牌错误,那么验证就完成了。

所以我编写了一些代码,将我的数据插入到最小 XML 文档中的 CDATA 元素中,然后解析数据,这很好——它可以工作,没问题。

但我想知道,我实现了我的目标吗?通过 XML 解析器运行我的数据是否确保它符合上述规范?我相信是因为上面的“获取更多信息”链接似乎重申了定义的 unicode 字符是 XML 中允许的字符。

但我想我最好问一下,因为我仍然假设成功的 XML 解析意味着文档通过了验证规则。

【问题讨论】:

    标签: xml validation


    【解决方案1】:

    如果文件格式正确,那么它将根据您的要求有效。

    请注意,“有效”xml 文档通常意味着根据 XSD 或 DTD 它是有效的,这不是您正在做的。

    【讨论】:

      【解决方案2】:

      您的方法将拒绝包含序列“]]>”的字符串。我看不出一个简单的方法。但无论如何,这似乎是一种相当粗暴的方法:应用正则表达式不是更简单吗?

      【讨论】:

      • 谢谢迈克尔。也许我会在解析之前去掉序列“]]>”。
      • >> "仅仅应用一个正则表达式不是更简单吗?" ....我认为解析更简单更快,因为 XML 解析器是用 C 编写的,我不必编写可能有问题的正则表达式。
      • 如果速度很重要,那么实例化 XML 解析器是您最不想做的事情。字符扫描会很快,但启动开销会很高。
      • 我在这里找到了一个正则表达式来完成这项工作:stackoverflow.com/questions/63098886/… 有趣的是,正则表达式的性能几乎与通过 XML 解析器推送数据进行验证完全相同。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-03
      • 2014-07-06
      相关资源
      最近更新 更多