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





Вы можете попробовать следующую книгу: Руководство разработчика Delphi по XML
В основном я бы рекомендовал вам использовать Microsoft DOM. Вам нужно будет импортировать библиотеку, как и любой другой COM-объект.
Есть ли какая-то особая причина использовать Microsoft DOM?
Я считаю, что это довольно просто понять. SAX - это другой вариант (не единственный вариант, который я могу добавить).
Вы можете использовать Delphi Привязка данных XML (File - New - Other - XML Mapping (я точно не знаю путь, я дома без Delphi)).
Он создает объекты / интерфейсы через поставщика XML, поэтому вы можете работать с объектами / структурами вместо простого текстового файла xml.
Вам не нужно усердно работать, читая и записывая каждый элемент XML - вы просто работаете с коллекциями объектов и их свойствами.
Это создает XML-файл преобразования xtr, который необходимо включить в исполняемый файл. Это делает XML набор данных, который проще, но менее гибок (он хорошо работает только с простым XML)
Вот пара руководств:
Кроме того, вы можете захотеть заглянуть в Модуль XMLIntf (хотя на этой связанной странице Delphi Wikia очень мало содержания).
Вы можете начать с изучения компонента Delphi TXMLDocument. Это даст вам основы работы с XML / DOM. Это просто и может быть добавлено, перетащив его в форму. Он имеет методы LoadFromFile и SaveToFile и по нему легко перемещаться.
Однако в какой-то момент вы исчерпаете возможности TXMLDocument, особенно если вы хотите работать с такими вещами, как XPath.
Я предлагаю вам взглянуть на IXMLDOMDocument2, который является частью MSXML2_TLB, например.
XML := CreateOleObject('MSXML2.DOMDocument.3.0') as IXMLDOMDocument2;
XML.async := false;
XML.SetProperty('SelectionLanguage','XPath');
Вам нужно будет добавить msxmldom, xmldom, XMLIntf, XMLDoc и MSXML2_TLB в раздел использования.
Есть несколько библиотек компонентов, но я бы посоветовал написать свой собственный вспомогательный класс или функции. Вот пример того, что мы написали и использовали:
function XMLCreateRoot(var xml: IXMLDOMDocument2; RootName: string; xsl: string = ''; encoding: string = 'ISO-8859-1'; language: string = 'XPath'): IXMLDOMNode;
var
NewPI: IXMLDOMProcessingInstruction;
begin
if language<>'' then
xml.SetProperty('SelectionLanguage','XPath');
if encoding<>'' then begin
NewPI:=xml.createProcessingInstruction('xml', 'version = "1.0" encoding = "'+encoding+'"');
xml.appendChild(NewPI);
end;
if xsl<>'' then begin
NewPI:=xml.createProcessingInstruction('xml-stylesheet','type = "text/xsl" href = "'+xsl+'"');
xml.appendChild(NewPI)
end;
xml.async := false;
xml.documentElement:=xml.createElement(RootName);
Result:=xml.documentElement;
end;
Возьми это оттуда.
Я использую nativeXML от simdesign. Работа с XML избавит вас от лишних хлопот, и вы начнете работать за считанные минуты.
NativeXML теперь имеет открытый исходный код и поддерживает Delphi до 2010 г.
Похоже, что версия с открытым исходным кодом теперь поддерживает Delphi XE.
Я работаю с nativeXML около года. Мои потребности довольно просты. Свободное владение XML - это небольшая часть более крупного приложения для меня, но я смог реализовать нужные мне части почти так же быстро, как я могу их кодировать, онлайн-справка хороша, и мои потребности были удовлетворены за день, а не за неделю или дольше. Я второй голос davehay за nativeXML.
Мне нужно проверить nativelXML, звучит хорошо. Есть ли минусы?
см. stackoverflow stackoverflow.com/questions/1535143/…