确定给定字符串是否为XML

时间:2014-09-11 15:41:09

标签: c# linq-to-xml

我使用的API如果成功则返回XML,如果失败则返回错误字符串。我想找到一种确定字符串是XML还是字符串的强大方法。在我尝试自己做之前,我想知道框架中是否存在某些东西。

3 个答案:

答案 0 :(得分:1)

尝试解析,如果抛出异常不是xml

string unknow = "";
try
{
    return XElement.Parse(unknow);
}
catch (System.Xml.XmlException)
{
    return null;
}

答案 1 :(得分:1)

一种方法是让XDocument尝试解析输入。如果解析成功,则输入是有效的XML;否则,它不是有效的XML。

Boolean ValidateXml(string xmlString) {
    try {
        return XDocument.Load(new StringReader(xmlString)) != null;
    } catch {
        return false;
    }
}

这是验证XML的相对昂贵的方法。如果您打算稍后使用已解析的XML,我会将其更改为TryParse,并使用如下输出:

Boolean TryParseXml(string xmlString, out XDocument res) {
    try {
        res = XDocument.Load(new StringReader(xmlString));
        return true;
    } catch {
        res = null;
        return false;
    }
}

以下是我将这种方法称为:

XDocument doc;
if (TryParseXml(response, out doc)) {
    // Use doc here
} else {
     // Process the error message
}

答案 2 :(得分:0)

一种强大但缓慢的方法是解析结果(XElement.Parse())并查看它是否会引发异常。

public bool IsValidXml(string candidate)
{
    try{
        XElement.Parse(candidate);
    } catch(XmlException) {return false;}
    return true;
}

一种不太健壮但更快捷的方法是检查一些基本假设,例如字符串(在修剪空格之后)是否以<>标签开头和结尾。