1

可能重复:
如何在调用 .LoadXml() 之前检查字符串输入中的有效 xml

在我正在实现的程序中,用户可以输入一个字符串。我必须确定如果它是一个有效的 xml,那么我必须区别对待它。是否有一个正则表达式可以找到给定的字符串是否是有效的 xml?

4

1 回答 1

3

不可能构造一个“普通”的正则表达式来识别带有不平衡括号的字符串和带有平衡括号的字符串,因为正则表达式的底层可编程系统不足以做到这一点。出于同样的原因,理论上不可能构造一个能够识别格式良好的 XML *的正则表达式。

即使理论上可以构建这样的表达式,它也不实用:构建识别器所需的工作量与构建成熟的 XML 解析器所需的工作量大致相同。

幸运的是,.NET 已经带有几个 XML 解析器。像这样的一段代码

bool TryGetValidXml(string s, out XDoxument res) {
    try {
        res = XDocument.Load(s);
        return true;
    } catch {
        res = null;
        return false;
    }
}

会成功的。


*有各种扩展,例如 Perl 的递归正则表达式和 .NET平衡组,可让您解决此限制。

于 2012-11-21T16:48:12.633 回答