Что делать с именами узлов XML (жестко закодированными значениями)?
Я работал с XML в последнее время. И заметил что-то вроде феномена (может быть, это не так уж важно для остального мира, но для меня это было так). Возможно, это я новичок. Но не должны ли большинство жестко запрограммированных или магических чисел быть взломаны в файле конфигурации? Например,
string url = "http://www.domain.com/aDocument.xml";
XmlDocument feed = new XmlDocument();
feed.Load(url);
XmlNode errorsNode = feed.SelectSingleNode("Errors");
if (errorsNode != null)
{
XmlNode error = errorsNode.FirstChild;
lblError.Text = "Error: " + error.SelectSingleNode("Code").InnerText;
}
Вот документ XML:
<Errors>
<Error>
<Code>AWS.MissingParameters</Code>
<Message>You are missing an parameter</Message>
</Error>
</Errors>
Как бы вы проанализировали это без жесткого кодирования "код" или "сообщение"?
2 ответа
То же самое, что и для чисел. Я объявил бы константы типа string, которые имеют имя элемента, чтобы получить, и затем передал бы это в методы на моих инструментах XML.
Однако вы можете рассмотреть возможность создания представления объекта из XML-документа (или схемы, если она у вас есть), которое будет обрабатывать все это для вас. Таким образом, вы можете просто загрузить XML-документ в код, и он выполнит для вас анализ в представлении объекта.
Затем, если XML изменится, вы измените сгенерированный код, чтобы использовать новые имена элементов.
Вы хотите использовать инструмент XSD.EXE для этого.
Я не знаю, является ли это лучшим вариантом, но я обычно видел, как такого рода вещи обрабатываются с помощью набора строковых констант. По крайней мере, если вы обрабатываете одну и ту же XML-схему в нескольких местах, все ваши магические строки определяются в одном месте. Я думаю, что перенести это в файл конфигурации было бы излишним, если схема часто не меняется.