Дом против Саксофона — создание Xmls

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

Спасибо


person Idan    schedule 25.02.2010    source источник


Ответы (9)


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

SAX (Simple API for XML) – это API последовательного доступа для парсера для XML.
SAX предоставляет механизм для чтения данных из XML-документа.

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

person Pascal MARTIN    schedule 25.02.2010
comment
самый простой способ создать XML - это выполнить конкатенацию на уровне байта/строки. Почему люди хотят использовать API синтаксического анализа для создания документов? - person vtd-xml-author; 25.02.2010
comment
Выполняя конкатенацию строк, вам придется иметь дело с экранированием себя (включая, например, CDATA, о котором многие забывают); что уже является хорошей причиной для использования API ;; Кроме того, DOM (довольно) стандартизирует языки, что хорошо, так как это поможет сделать ваш код более понятным ;; И я видел так много дрянного кода типа конкатенации, используемого для создания XML... - person Pascal MARTIN; 25.02.2010

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

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

Это на Яве. но то же самое можно сделать и с C++;

person Santhosh Kumar Tekuri    schedule 25.02.2010

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

Вас также может заинтересовать В чем разница между парсерами SAX и DOM

и Проверка DOM и SAX

person stacker    schedule 25.02.2010
comment
вам нужно войти в систему, чтобы прочитать ссылку DOM и SAX Put to the Test, это отстой .. - person iddober; 23.05.2010

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

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

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

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

person Didier Trosset    schedule 25.02.2010

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

person Kangkan    schedule 25.02.2010

Я не видел API-интерфейсов для написания в стиле SAX, они предназначены только для чтения. Для написания ваших вариантов есть DOM и различные нестандартные API-интерфейсы конструктора (которые часто гораздо удобнее в использовании, чем DOM). Нестандартизированные API отличаются от языка/библиотеки к другому, но см., например. Builder для 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")
      )
    )
  ;
}
person Tronic    schedule 25.02.2010

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

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

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

person knatten    schedule 25.02.2010

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

person Bart van Heukelom    schedule 02.07.2010

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

person Deven Patil    schedule 09.03.2013