Что плохого в построении XML с конкатенацией строк? - PullRequest
22 голосов
/ 14 июня 2010

В теме Какая ваша любимая любимая мозоль "невежественности программиста"? , появляется следующий ответ с большим количеством голосов:

Programmers who build XML using string concatenation.

Мой вопрос: почему сборка XML с помощью конкатенации строк (например, StringBuilder в C #) плоха?

Я делал это несколько раз в прошлом, так как иногда это самый быстрый способ для меня получитьиз точки А в точку Б, когда дело доходит до структур данных / объектов, с которыми я работаю.До сих пор я придумал несколько причин, почему это не самый лучший подход, но есть ли что-то, что я пропускаю?Почему этого следует избегать?

  1. Вероятно, самая большая причина, о которой я могу подумать, это то, что вам нужно вручную избегать строк, и большинство новых программистов (и даже некоторые опытные программисты) забудут об этом.Это будет хорошо работать для них, когда они тестируют его, но тогда «случайным образом» их приложения не будут работать, когда кто-то добавит символ & в свой ввод.Хорошо, я куплю это, но действительно легко предотвратить проблему ( SecurityElement.Escape , чтобы назвать его).
  2. Когда я делаю это, я обычно опускаю объявление XML (т.е.<?xml version="1.0"?>).Это вредно?
  3. Штрафы за производительность?Если вы придерживаетесь правильной конкатенации строк (т. Е. StringBuilder), стоит ли беспокоиться об этом?Предположительно, классу, подобному XmlWriter, также потребуется немного манипулировать строками ...
  4. Существуют более элегантные способы генерации XML, например, использование XmlSerializer для автоматической сериализации / десериализации ваших классов.Хорошо, конечно, я согласен.В C # есть масса полезных классов для этого, но иногда я не хочу создавать класс для чего-то очень быстрого, например, для записи файла журнала или чего-то такого.Это я только ленивый?Если я делаю что-то «настоящее», это мой предпочтительный подход к работе с XML.

Ответы [ 13 ]

1 голос
/ 14 июня 2010

Как вы сказали, просто неправильно создавать XML с использованием конкатенации строк, особенно теперь у вас есть XML linq, который позволяет легко создавать XML-граф и получать правильные пространства имен и т. Д.

Очевидно, что контекст и способ его использования имеют значение, например, в строке примера регистрации. Формат может быть вполне приемлемым.

Но слишком часто люди игнорируют эти альтернативы при работе со сложными XML-графиками и просто используют StringBuilder.

0 голосов
/ 26 января 2012

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

Хорошо, это достижимо, но особенно если ваш XML не совсем соответствует стандартамне указывает объявление версии XML ... просто говорит.

0 голосов
/ 14 июня 2010

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

И затем я загружаю его, используя дерево XMLReader.И если файл XML не читается как действительный, я возвращаюсь и нахожу проблему в моих подпрограммах сохранения и исправляю это.Но пока я не получу работающую систему сохранения / загрузки, я отказываюсь выполнять критически важную работу, пока не узнаю, что мои инструменты надежны.

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

Потому что независимо от того, используете ли вы StringBuilder или XMLNodes для сохранения / чтения вашего файла, , если онвсе бесполезный беспорядок, никто не поймет, как это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...