Dom Vs Sax - создание Xmls - PullRequest
       10

Dom Vs Sax - создание Xmls

6 голосов
/ 25 февраля 2010

Я знаю, что разница между Sax и Dom довольно существенна в разборе Xml, но как насчет их создания? Есть ли способ создать новый Xml-файл с помощью Sax или, если я захочу создать новый XML-файл на основе моих данных в моей программе, мне придется использовать DOM?

Спасибо

Ответы [ 9 ]

7 голосов
/ 25 февраля 2010

SAX есть, цитируя википедию:

SAX (Простой API для XML) является серийным access parser API для XML.
SAX предоставляет механизм для чтения данные из XML-документа .

т.е. SAX отлично подходит для чтения XML-документа, но если вы хотите написать его, вы, вероятно, будете использовать DOM.

4 голосов
/ 25 февраля 2010

Вы можете использовать SAX для создания XML. Смотрите следующее:

http://code.google.com/p/jlibs/wiki/XMLDocument

Это на Java. но то же самое может быть достигнуто с C ++;

2 голосов
/ 25 февраля 2010

SAX предназначен для чтения XML-документов, а не для их записи.

DOM с другой стороны предназначен для создания отображения между структурой в памяти и документом XML.

Если у вас уже есть собственная структура данных для ваших данных в памяти (это гораздо удобнее, чем структура DOM для вашей обработки), создание структуры данных DOM будет означать дублирование ваших данных. Может быть, это не то, что вы хотите, если у вас есть большие данные. Кроме того, вам придется полностью создать структуру DOM, прежде чем вы сможете записать ее в XML, удвоив объем памяти, необходимый для вашего приложения. Кроме того, это создаст задержку в вашей обработке.

Я не знаю о библиотеке, которая бы помогла написать XML-документ, но если бы я уже использовал SAX, имея свою собственную структуру данных, я бы не стал беспокоиться о DOM.

2 голосов
/ 25 февраля 2010
  • DOM используется, когда ваши данные помещаются в память с удобным API.
  • С SAX вы можете записывать огромные объемы данных, SAX также обеспечивает более высокую производительность.

Вы также можете быть заинтересованы в В чем различия между SAX и DOM-парсером

и DOM и SAX, прошедшие тестирование

1 голос
/ 25 февраля 2010

Иногда я просто буду использовать printf для создания простых XML-файлов, но обычно стоит использовать инструмент XML-привязки, например, например. Код Синтеза XSD . Это создаст иерархию классов для вас на основе XSD. Вы просто заполняете иерархию объектов, и она создаст для вас XML.

Таким образом, вы получаете статическую проверку того, что ваш XML будет правильно сформирован и действителен, что действительно помогает быстро выявить ошибки.

Если вы когда-либо использовали JAXB или любой другой подобный инструмент для Java, это почти то же самое.

1 голос
/ 25 февраля 2010

Я не видел API написания в стиле SAX, он только для чтения. Для написания ваших вариантов используются DOM и различные нестандартные API-интерфейсы для разработчиков (которые зачастую гораздо удобнее использовать, чем DOM). Нестандартизированные API отличаются от языка / библиотеки к другому, но см., Например, Строитель для Ruby . Я также разработал аналогичный API для C ++ с перегрузкой операторов: (пример - просто тестирование возможного API, он фактически ничего не делает)

#include <string>

struct XMLBuilder {
  XMLBuilder& operator[](std::string const& elemName) { return *this; }
  XMLBuilder& operator()(std::string const& attrName, std::string const& attrValue) { return *this; }
  XMLBuilder& operator()(std::string const& innerText) { return *this; }
  XMLBuilder& operator()(XMLBuilder const& innerDoc) { return *this; }
};

int main() {
  XMLBuilder()
    ["contact"](XMLBuilder()
      ["name"]("Patrick Hines")
      ["phone"]("type", "home")("206-555-0144")
      ["phone"]("type", "work")("425-555-0145")
      ["address"](XMLBuilder()
        ["street"]("...")
        ["zip"]("12345")
      )
    )
  ;
}
1 голос
/ 25 февраля 2010

DOM - естественный выбор для создания документов.

0 голосов
/ 09 марта 2013

Всегда используйте DOM для создания нового XML ... Для целей чтения предпочитайте SAX ..

0 голосов
/ 03 июля 2010

Вы можете попытаться найти эквивалент XmlWriter .NET на вашем языке / платформе.

...