Я вызываю функцию, которая возвращает строку, содержащую данные XML. Как эта функция работает, не важно, но полученный xml может быть различным в зависимости от успеха функции.Проверка XML для ожидаемой структуры
В принципе функция возвращает либо ожидающий XML, либо XML с ошибкой. Ниже приведены основные образцы того, что оба результата может выглядеть ...
На успех:
<SpecificResult>
<Something>data</Something>
</SpecificResult>
On Error:
<ErrorResult>
<ErrorCode>1</ErrorCode>
<ErrorMessage>An Error</ErrorMessage>
</ErrorResult>
Путь моя система настроена в том, что я могу преобразовать строку xml в класс с простой функцией преобразования, но для этого требуется, чтобы я знал тип класса. При успехе я узнаю, что это SpecificResult, и я могу конвертировать. Но сначала хочу проверить, произошла ли ошибка.
Идеальный конечный результат позволил бы что-то похожее на это ...
string xml = GetXML();
if(!IsError(xml))
{
//convert to known type and process
}
Таким образом, вопрос, что является лучшим способом для реализации функции IsError
?
Я думал пару вариантов, но не уверен, если я, как и любой из них на самом деле ...
- проверить, если строка содержит XML
"<ErrorResult>"
- попытаться преобразовать XML в класс ErrorResult и проверить для неудачу
- использование XDocument или аналогичные встроенные функции для синтаксического анализа дерева и поиск ErrorResult узла
Благодаря это выглядит достаточно прочным для меня. Просто чтобы убедиться, что msdn не ясно в документах, неудачная попытка «Parse» по-прежнему вернет XDocument (хотя и пустой) правильно? ... также, продержаться для принятого ответа, будет ждать, если у других есть какие-либо данные;) – musefan
[XDocument.Parse (string)] (http://msdn.microsoft.com/en-us/library/system. xml.linq.xdocument.parse.aspx) фактически [бросает исключение XmlException, если он встречает недействительный XML] (http://msdn.microsoft.com/en-us/library/bb387040.aspx). Тем не менее, это звучит как действительно исключительное условие в этом случае, поэтому вы можете не захотеть обработать это в методе 'IsError (string)', а скорее разрешить исключение распространяться дальше в цепочке вызовов. –