Что делать с именами узлов XML (жестко закодированными значениями)? - PullRequest
0 голосов
/ 19 февраля 2009

Я работаю с 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>

Как бы вы проанализировали это без жесткого кодирования "code" или "message"?

Ответы [ 2 ]

2 голосов
/ 19 февраля 2009

Я не знаю, является ли это лучшим вариантом, но я обычно видел, как такого рода вещи обрабатываются с помощью набора строковых констант. По крайней мере, если вы обрабатываете одну и ту же XML-схему в нескольких местах, все ваши магические строки определяются в одном месте. Я думаю, что перенести это в файл конфигурации было бы излишним, если схема часто не меняется.

2 голосов
/ 19 февраля 2009

То же, что и для чисел. Я объявил бы константы типа string, которые имеют имя элемента, чтобы получить, и затем передал бы это в методы на моих инструментах XML.

Однако вы можете рассмотреть возможность создания представления объекта из XML-документа (или схемы, если она у вас есть), которое бы обрабатывало все это для вас. Таким образом, вы можете просто загрузить XML-документ в код, и он выполнит для вас анализ в представлении объекта.

Затем, если XML изменится, вы измените сгенерированный код, чтобы использовать новые имена элементов.

Для этого вы хотите использовать инструмент XSD.EXE.

...