Библиотеки и учебные пособия по XML в Delphi

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

Какую библиотеку компонентов XML следует использовать? Есть ли хорошие учебники по XML с Delphi?


person Harriv    schedule 04.11.2008    source источник
comment
см. stackoverflow stackoverflow.com/questions/1535143/   -  person Charles Faiga    schedule 10.10.2009


Ответы (6)


Вы можете начать с рассмотрения компонента 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;

Возьми оттуда.

person Community    schedule 04.11.2008

Я использую nativeXML от simdesign. Работа с XML избавит вас от всех хлопот, и вы сможете начать работу за считанные минуты.

person davehay    schedule 05.11.2008
comment
NativeXML теперь имеет открытый исходный код и поддерживает Delphi до 2010 г. - person mjn; 08.04.2011
comment
Похоже, что версия с открытым исходным кодом теперь поддерживает Delphi XE. - person Phil Gilmore; 06.07.2011

Вот пара уроков:

Кроме того, вы можете изучить модуль XMLIntf (хотя эта связанная страница Delphi Wikia очень легкий по содержанию).

person Mattias Andersson    schedule 04.11.2008

Вы можете попробовать следующую книгу: Руководство разработчиков Delphi по XML

В основном я бы рекомендовал вам использовать Microsoft DOM. Вам нужно будет импортировать библиотеку, как и любой другой COM-объект.

person Steve    schedule 04.11.2008
comment
Есть ли какая-то особая причина для использования Microsoft DOM? - person Harriv; 05.11.2008
comment
Я нахожу это довольно простым для понимания. SAX - это другой вариант (не единственный другой вариант, который я могу добавить). - person Steve; 06.11.2008

Вы можете использовать привязку данных XML Delphi (Файл - Новый - Другое - Сопоставление XML (я не путь точно не знаю, сижу дома без Delphi)).

Он создает объекты/интерфейсы через поставщика XML, поэтому вы можете работать с объектами/структурами вместо простого текстового файла xml.

Вам не нужно усердно работать, читая и записывая каждый XML-элемент — вы просто работаете с коллекциями объектов и их свойствами.

person DiGi    schedule 04.11.2008
comment
Это создает файл преобразования xtr XML, который необходимо включить в исполняемый файл. Это делает XML набором данных, который проще, но менее гибок (он хорошо работает только с простым XML). - person Osama Al-Maadeed; 18.12.2008

Я работаю с nativeXML около года. Мои потребности довольно просты. Для меня свободное владение XML является небольшой частью более крупного приложения, но я смог реализовать нужные мне части почти так же быстро, как я могу их кодировать, онлайн-справка хороша, и мои потребности были удовлетворены за день, а не за неделю. или дольше. Я второй голос Davehay за nativeXML.

person jrodenhi    schedule 05.11.2008
comment
Мне нужно проверить nativelXML, звучит хорошо. Есть ли недостатки? - person Harriv; 06.11.2008