我使用的API如果成功则返回XML,如果失败则返回错误字符串。我想找到一种确定字符串是XML还是字符串的强大方法。在我尝试自己做之前,我想知道框架中是否存在某些东西。
答案 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;
}
一种不太健壮但更快捷的方法是检查一些基本假设,例如字符串(在修剪空格之后)是否以<>
标签开头和结尾。