检查一行XML是否有效(不是完整的文档)



在C#中:

我有一组文本行(应该是XML),它们被发送到要添加到XML文档中的函数。每一行都是一个简单的块,如以下3个示例:

<AAA f="1" g="3"> </AAA>
<AAA f="2" g="2"> </AAA>
<AAA f="3" g="3"> </AA     <-- Oops a bad one!

在将其接受为完整的XML文档之前,我需要检查每一行,看看它是否是有效的XML,因为有些行不好,但我们想要所有好的行。

ROW1: good
ROW2: good
ROW3: bad
ROW4: good

在这种情况下,我们只需要ROW1,2和4。

那么,当行字符串不是完整文档时,我该如何检查它是否是有效的XML呢?

我会尝试这样的东西:

public static bool IsValid(this string XML)
{
    try
    {
        XElement temp = XElement.Parse(XML);
    }
    catch (FormatException)
    {
        return false;
    }
    catch (XmlException)
    {
        return false;
    }
    return true;
}

您可以使用XmlTextReader验证XML文档片段(这就是您的行),但您必须使用特殊的读取器设置创建读取器


XmlParserContext context = new XmlParserContext(null, nsmgr, null, XmlSpace.None);
XmlReaderSettings settings = new XmlReaderSettings() {
    ConformanceLevel = ConformanceLevel.Fragment
};
XmlReader reader = XmlReader.Create(new StringReader(xmlFrag), settings, context);

XmlReaderSettings ConformanceLevel

我会这样做。

private static bool IsValidXml(string xmlToCheck)
        {
            var doc = new XmlDocument();
            try
            {
                doc.LoadXml(xmlToCheck);
                return true;
            }
            catch (Exception ex)
            {
                //catch ex.
                return false;
            }
        }

相关内容

最新更新