Dom Vs Sax - създаване на Xml

Знам, че разликата между Sax и Dom е доста съществена по отношение на анализа на Xml, но какво да кажем за създаването на такива? има ли дори начин да създам нов Xml с помощта на Sax или ако искам да създам нов Xml файл въз основа на моите данни в моята програма, ще трябва да използвам DOM?

Благодаря


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


Отговори (9)


SAX е, цитирайки wikipedia:

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 е (доста) стандартизиран accros езици, което е хубаво нещо, което ще ви помогне да направите кода си по-лесен за разбиране ;; И съм виждал толкова много скапан код от тип конкатенация, използван за създаване на XML... - person Pascal MARTIN; 25.02.2010

Можете да използвате SAX за създаване на XML. Вижте следното:

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

Това е в Java. но същото може да се постигне с 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 и различни нестандартизирани програмни интерфейси за изграждане (които често са много по-удобни за използване от 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-свързващ инструмент като напр. Code Synthesis 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