Я знаю, что различия между Sax и Dom являются довольно существенными относительно парсинга Xml, но что относительно того, чтобы создать? существует ли даже способ создать новый Xml с помощью Саксофона или что, если я хочу создать новый XML-файл на основе своих данных в моей программе, я должен буду использовать DOM?
Спасибо
SAX есть, цитируя википедию:
SAX (Простой API для XML) - это последовательный доступ парсер API для XML.
SAX предоставляет механизм для чтения данных из XML-документа .
т.е. SAX отлично подходит для чтения XML-документа, но если вы хотите его написать, вы, вероятно, будете использовать DOM.
Вы можете использовать SAX для создания XML. См. Следующее:
http://code.google.com/p/jlibs/wiki/XMLDocument
Он написан на Java. но того же можно добиться с помощью C ++;
Вам также может быть интересно следующее. Каковы различия между SAX и DOM парсером
SAX предназначен для чтения XML-документов, а не для их написания.
DOM, с другой стороны, предназначен для создания отображения между структурой в памяти и XML-документом.
Если у вас уже есть собственная структура данных для ваших данных в памяти (что гораздо удобнее, чем структура DOM для вашей обработки), создание структуры данных DOM будет означать дублирование ваших данных. Возможно, это не то, что вам нужно, если у вас большие данные. Кроме того, вам придется полностью создать структуру DOM, прежде чем вы сможете записать ее в XML, что удвоит объем памяти, необходимый для вашего приложения. Кроме того, это создаст задержку в обработке данных.
Я не знаю о библиотеке, которая помогла бы написать XML-документ, но если бы я уже использовал SAX, имея свою собственную структуру данных, я бы не стал беспокоиться о DOM.
Модель DOM - это естественный выбор для создания документов.
Я не видел 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")
)
)
;
}
Иногда я просто использую printf для создания простых XML, но обычно стоит использовать инструмент привязки XML, например XSD синтеза кода . Это создаст для вас иерархию классов на основе XSD. Вы просто заполняете иерархию объектов, и она создает для вас XML.
Таким образом, вы получаете статическую проверку того, что ваш XML будет правильно сформирован и действителен, что действительно помогает выявить ошибки на раннем этапе.
Если вы когда-либо использовали JAXB или любой подобный инструмент для Java, это почти то же самое.
Вы можете попробовать найти эквивалент XmlWriter из .NET в вашем языке/платформе.