2013-11-28 35 views
2

如果提供程序提供的XML字符串由于解析错误而无法解析(并且它不会解决此问题一段时间),我想知道是否可以执行一些验证检测并更正XML,这样就可以防止失败。如何在XML解析中检测未关闭的括号

的问题的一些示例可以是:

经验法则是让01​​更换为<>

  • 孤独<更换为&lt;
  • 等词语<this>不在XML标签(该标准可以取代<>符号以忽略未封闭标签。
  • 个数学公式是这样的:5<x<10

我不能跟目前更多的场景,我想我还发现一个O那些正则表达式,但不是足够多。

我想阅读你的意见。

+0

这不是聊天室。你使用了一个正则表达式,你能展示它吗?为什么不够呢?为什么XML首先被打破?你能否展示一些示例输入和预期输出? – HamZa

+0

@HamZa我用正则表达式来解决像这样的词,但它不能用于所有情况。我知道这不是一个聊天室,但我已经阅读了一些有趣的答案和标准,这是我的意图,并且很抱歉让开场白而不是你喜欢的方式。 – po5i

回答

1

我想知道是否可以执行一些验证 检测并更正XML,使其具有防故障功能。

你的崇高意图不幸被误导了。从根本上讲,如果不依赖协议的某些部分是无错误的,通信错误就无法修复。

你只能在接受的内容中如此自由。 即使Postel's Law也有其限制。

构建基于XML的系统的标准做法是要求消息是格式良好的XML。 (实际上,非格式良好的XML不是XML;请参阅Michael Kay's answer。)特别是当您不能信任发件人遵循协议时,应检查输入。 XML的好处之一是存在经过测试的解析器来执行这些检查。

将消息从网络中拉出并立即使用已知可靠的解析器(如Xerces2)进行解析。如果有错误,请将它们传回给发件人进行修复,并且不要尝试进一步处理该消息。如果你有一个模式,解析应该在对模式进行验证的情况下进行,以便在协议中检测更高级别的错误。

不要被临时纠正“明显”错误的可能性所诱惑。在一般情况下,这个问题在理论上是无法解决的,尝试应用零散的更正实际上会使您的系统不够健壮,而不是更多。

+1

很好的答案,谢谢。 – po5i

0

我会推荐使用XML进行数据交换。这是一个伟大的格式。当人们使用XML时,您可以选择多种可用的现成解析器,以确保每个人都可以读取您的数据。相比之下,如果您使用不规范且没有记录的自制格式,那么解读数据就成了一场噩梦。

我还建议如果您使用自制格式进行数据交换,则不要将其称为XML,因为您只会将人们混淆。

如果您想在此解析自制非XML数据交换格式,请不要将问题标记为“XML”,因为您接触到错误的受众。请提供格式说明。我知道你没有一个,但编写一个程序来读取数据的格式并不是任何有能力的程序员都应该尝试的。

+0

它是XML格式,这就是它被标记为xml的原因。 – po5i

+0

如果它有<>,那么它不是XML。 –