正则表达式检查XML是否格式正确

时间:2009-11-17 23:03:58

标签: c# xml regex

是否有正则表达式来检查xml是否格式正确?

由于

编辑:如果不是正则表达式,那么有一个很好的解析方法,我可以在c#中使用,不会抛出异常。我尝试使用xmlReader,但它对我没用。

9 个答案:

答案 0 :(得分:7)

这超出了正则表达式的功能。换句话说,答案是不可能的。

编辑:有很多工具可用于检查格式良好,但它们都涉及某种XML解析器/验证器。如果您提供有关您的环境的更多信息,我们可以指出您正确的方向。

答案 1 :(得分:6)

没有。

XML语法不规则,无法为任何正则表达式做噩梦。

你不是第一个提出这个问题的人,但是不要感到难过,因为关于使用正则表达式解析HTML和XML的问题将继续被问到,因为正则表达式看起来非常适合这项工作,但它们并不令人遗憾。 / p>

XML语法足够复杂,您无法使用正则表达式安全地解析它。它看起来简单而有规律,但是有足够的空间引起问题。一个令人讨厌的CDATA部分和事情变得非常困难。并考虑将RSS嵌入XML中的RSS源。

因此请使用XML解析库。有很多。

如果您想了解更多细节,请查看this question which gives some examples of the horror syntax you can meetthis question which shows what happens if do try to parse these things with Regular Expressions

答案 2 :(得分:2)

没有正则表达式解决方案,because Jeff told me so.

答案 3 :(得分:2)

  

如果不是正则表达式,那么有一个很好的解析方法,我可以在c#中使用,不会抛出异常。我尝试使用xmlReader,但它对我没用。

使用XmlReaderwhile(reader.Read()) {}(捕获任何异常)可能是最快的纯托管方法。

答案 4 :(得分:1)

不,没有。 (实际上,至少就一般情况而言。)如果要确定XML是否格式正确,请使用验证解析器。

答案 5 :(得分:1)

改为使用XML validator

答案 6 :(得分:1)

不,如果不考虑递归正则表达式。 Regexp无法检查仲裁嵌套。但是,一些正则表达式引擎接受递归正则表达式,您可以尝试将其用于此目的。

答案 7 :(得分:0)

最新版本的PCRE具有各种功能,可以实现这一目标,但代码会很丑陋。 libxml2附带xmllint,为什么不使用正确的工具来完成工作?

答案 8 :(得分:0)

我在这里做出一个假设。您认为使用库将太慢或太重,无法快速和/或有效地执行此操作。

如果 这个案例,那么请测试一下。尝试一些库,看看它们有多大,看看它们有多快。