【问题标题】:Regex to check for XML if it is well formed正则表达式检查 XML 是否格式正确
【发布时间】:2009-11-17 23:03:57
【问题描述】:

是否有用于检查 xml 格式是否正确的正则表达式?

谢谢

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

【问题讨论】:

  • 你想要完成什么?
  • 免责声明:SO 通常不会这么快。只是最近这个话题上来不少,甚至在播客中也提到过。
  • Jim Garrison - 如果我不得不猜测,我会说目标是检查 XMl 文档或片段的格式是否正确。 ??在这种情况下,通常有一个表示 XmlDocument 的类(取决于所使用的编程框架)。无论是浏览器中托管的 Javascript,还是 Java、C# 或 PHP——都有代表 XML 文档的类可以做到这一点——检查格式是否正确。他们经常隐含地这样做。正则表达式不是适合这项工作的工具。
  • 我们通过基于 REST 的 Web 服务获得一个 xml。我只想在每次处理之前检查收到的 xml 是否真的是 xml 而不是 html 或文本。

标签: c# xml regex


【解决方案1】:

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

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

【讨论】:

  • 您正在回答所述问题,但可能未提供所需信息。更好的答案可能是“使用 XmlDocument 对象或类似对象来验证格式是否正确”。有时人们不知道适合工作的工具,尽管他们知道自己想做的工作。
  • @Cheeso - 你说得对,我本可以提供更多帮助。我已经编辑了帖子。谢谢。
【解决方案2】:

没有。

XML 语法不规则,足以让任何正则表达式成为噩梦。

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

XML 语法非常复杂,您无法使用正则表达式安全地解析它。它看起来简单而有规律,但有很大的空间引起问题。一个令人讨厌的 CDATA 部分,事情变得非常困难。并考虑将 HTML 嵌入 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

【讨论】:

  • Dave,XML 在正则表达式的意义上看起来并不规则。请在 Wikipedia 中查找常规语法/语言。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        请改用XML validator

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

            最新版本的 PCRE 具有各种可以实现这一目标的功能,但代码会非常难看。 libxml2 自带 xmllint,为什么不使用合适的工具呢?

            【讨论】:

              【解决方案9】:

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

              如果这的情况,那么测试一下。尝试几个库,看看它们有多大,看看它们有多快。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-04-29
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多