Brovin Yaroslav

OXml - библиотека для работы с XML

В теме 6 сообщений

OXML - это новая библиотека по работе с XML для Delphi и Lazarus, разработанная в конце 2013 года.

Целью OXML является быть универсальной и быстрейшей XML библиотекой для языка Паскаль.

Основные особенности OXML являются:

  1. Парсер SAX
  2. Реализация DOM 
  3. Прямое чтение /запись XML файлов 
  4. Полная совместимость при работе с TXMLDocument (XmlIntf.TXMLDocument)

 

Автор: Software Solution Ondřej Pokorný

Тип лицензии: Open Source

Ссылка: http://www.kluug.net/oxml.php

Скачать: SourceForge

 

Library design

  • Use the same XML library for all your Pascal projects including:
    1. Delphi for Win32, Win64 and OSX (Delphi 6 and newer).
    2. Delphi ARC/NEXTGEN for iOS and Android (Delphi XE4 and newer).
    3. Lazarus on Win32, Win64, Linux, OSX (Lazarus 1.0 and newer).
    4. Corresponding C++Builder compilers (not tested though).
  • Native pascal object oriented code.
  • No external dll libraries are required.
  • No dependency on a visual library like VCL, LCL or FMX.
  • Full unicode support even for D6-D2007.
  • Powerful XPath engine.
  • Faster than everything else on all platforms thanks to various optimizations.
  • OXml is able to read and write invalid XML documents and correct errors in them (if wanted). If not wanted, OXml throws an exception when you are trying to read/write an invalid XML document.
  • Supports all on the platform available encodings (UTF-16, UTF-8, single-byte ISO, WIN, KOI8...) by all parsers automatically. That means that the encoding is read and set from the <?xml encoding="" ?> tag during both reading and writing.
Readers and writers included in OXml
OXml features 4 classes for working with XML documents:
  1. TXMLWriter (OXmlReadWrite.pas): Basic XML writer. All other classes use it.
    Use it directly if performance is crucial for you.
  2. TXMLReader (OXmlReadWrite.pas): Basic XML reader. All other classes use it.
    Don't use it directly. If performance is crucial for you, use SAX which has the same performance but is much more comfortable to work with.
  3. TSAXParser (OXmlSAX.pas): Event-based parser according to the SAX specification.
    Anonymous methods are supported for modern Delphi versions, too. It's very fast and needs practically no memory.
  4. IXMLDocument (OXmlPDOM.pas): Record-based DOM according to the W3C DOM Level 1 specification. (Not strict - some small changes have been made to maximize performance).
    The fastest and most memory-friendly DOM for Pascal.
  5. TXMLSeqParser (OXmlSeq.pas): Sequential DOM parser based on OXmlPDOM.pas.
    Read huge XML files into the DOM sequentionally. This method combines DOM capabilities without the need to load the whole document at once.
    OXmlSeq is even a little bit faster than OXmlPDOM.
  6. sOXmlDOMVendor (OXmlDOMVendor.pas): fastest DOM vendor for Delphi's own TXMLDocument.
    Use TXMLDocument(MyXmlDoc).DOMVendor := GetDOMVendor(sOXmlDOMVendor) if you want to use Delphi's default TXMLDocument with the fastest and cross-platform vendor.
What are the differences between OXmlPDOM and OmniXML / MS XML?
  1. In general OXmlPDOM is very close to both implementations. They share the same functions and properties.
  2. OmniXML and MS XML are interfaced-based. That means that nodes are created one-by-one and when they are not referenced any more, they are automatically destroyed. 
    OXmlPDOM is record-based. Nodes are created by groups of 1024 items, which offers stunning performance. They are automatically destroyed only when the owner XML document is destroyed. Therefore such functions do not free memory used by a node:
    • TXMLNode.RemoveChild()
    • TXMLNode.ReplaceChild()
    When using OXmlPDOM you should call TXMLNode.DeleteChild(), TXMLNode.DeleteAttribute() or TXMLNode.DeleteSelf in order to be sure the node memory is marked as free and can be reused again.
  3. The nodes are of PXMLNode type - pointer to TXMLNode structure. Strictly speaking, PXMLNode nodes have to be dereferenced to TXMLNode when used but Delphi does this dereferencing for you, so you can easily use: XML.DocumentElement.AddChild('child');
    If you use FPC/Lazarus in Delphi mode ({$MODE DELPHI}), the nodes get dereferenced too. But if you use FPC/Lazarus in default mode, you have to dereference it manually with the "^" operator: XML.DocumentElement^.AddChild('child');
  4. OXmlPDOM does not store child nodes and attributes in AttributeNodes and ChildNodes lists.
    That means that the lists are created only when they are needed by the user. AttributeNodes and ChildNodes are not typical TList descendants but they are doubly linked lists with fast index iteration and count function support.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 18.02.2014 в 14:43, Brovin Yaroslav сказал:

Тип лицензии: Open Source

 

Screenshot_90.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я так подразумеваю, что в Berlin встроена библиотека OXml. Но где взять справку по OXml?

В справочной системе Delphi http://docwiki.embarcadero.com/RADStudio/Berlin/en/Using_the_Document_Object_Model

есть ссылка, которая ведёт сюда: https://code.google.com/archive/p/omnixml/

но там справки нет :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это но?

http://docwiki.embarcadero.com/Libraries/Berlin/en/Xml.XMLDoc.TXMLDocument

Или нужно что-то другое использовать?

Что добавлять в USES?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, оно. Так же компонент доступен на палитре компонентов. 

TXMLDocument - это универсальная обертка, которая умеет работать с несколькими реализациями XML. Выбор реализации через свойство TXMLDocument.DOMVendor.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Похожий контент

    • От x11
      Подскажите кросс-платформенные компоненты/библиотеки для Delphi Berlin+.
      Кроме OXML, она встроена в Delphi, но справки нет.
    • От Brovin Yaroslav
      Автор: Бровин Ярослав Тип лицензии: Open Source (MPL 2.0) Видео обзор: http://www.youtube.com/watch?v=bzEzOU3EWI4 FGX - Donate - QIWI: 4890 4941 7671 0929 Скачать:
      RAD Studio XE5 fgx_0.3.0.11.zip RAD Studio XE6 fgx_0.4.0.12.zip RAD Studio XE7 fgx_0.5.0.41.zip RAD Studio XE8 fgx_0.6.0.46.zip fgx_0.6.0.60.zip RAD Studio XE10 (RX) fgx_0.7.0.69.zip fgx_0.7.1.74.zip RAD Studio R101 (Berlin) fgx_0.7.1.112.zip , fgx_0.7.1.114.zip , fgx_0.7.1.118.zip  
      fgx_0.6.0.46.zip
      fgx_0.6.0.60.zip
      fgx_0.7.0.69.zip
      fgx_0.7.1.74.zip
    • От Rusland
      Пытаюсь скачать XML с курсами валют с cbr.ru. Получаю ошибку Project raised exception class EEncodingError with message 'No mapping for the Unicode character exists in the target multi-byte code page'. Как исправить?
      //aUrl = http://www.cbr.ru/scripts/XML_daily.asp function GetXML(aURL: string): String; var Http: THTTPClient; Ss: TStringStream; begin Result:=''; Http:=THTTPClient.Create; try Ss:=TStringStream.Create('', TEncoding.UTF8); Http.Get(aURL,ss); Result:=Ss.DataString; // тут ошибка except end; Http.Free; end;
    • От rareMax
      Хочу поделиться с пользователями данного ресурса ссылками на нативные компоненты для Delphi под iOS и Android.
       
      Автор: Babak Yaghoobi
      Тип лицензии: Open Source
      Ссылка на проект D.P.F Delphi Android Native Components (OpenSource): http://sourceforge.net/projects/dpfdelphiandroid/
      Скачать: ZIP, SVN
       
       
      P.S. Ярослав, не хватает спойлера в редакторе статей, что бы прятать большое количество скринов, или длинный текст, который может быть не всем нужен.
    • От Brovin Yaroslav
      Спасибо за предоставленные ссылки пользователю MyDelphiPw. Текст получен путем разбития его темы на две:
      Нативные компоненты - D.P.F Delphi iOS Native Components Нативные компоненты - D.P.F Delphi Android Native Components Текст ниже, написан пользователем MyDelphiPw.
      ----------------------------------------------------------------------
      Хочу поделиться с пользователями данного ресурса ссылками на нативные компоненты для Delphi под iOS и Android.
       
      Автор: Babak Yaghoobi
      Тип лицензии: Open Source
      Ссылка на проект D.P.F Delphi iOS Native Components (OpenSource): http://sourceforge.net/projects/dpfdelphiios/
      Скачать: ZIP, SVN
       
       
      Приложение, написанное на этом фреймворке
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу