Рассмотрим несколько простых примеров по работе с XML-файлами с использованием сборки XML языка Fore.
Для загрузки XML-файла необходимо:
Инициализировать объект одного из доступных классов: DOMDocument, DOMDocument40, DOMDocument60, FreeThreadedDOMDocument, FreeThreadedDOMDocument60. Первые три класса позволяют работать с различными версиями MSXML (3.0, 4.0, и 6.0 соответственно). Последние два класса используются, если осуществляется разработка приложения, в котором предусмотрен многопоточный доступ к одним и тем же данным.
Полученный объект может быть приведен к одному из следующих интерфейсов: IXmlDomDocument, IXmlDomDocument2, IXmlDomDocument3. IXmlDomDocument - содержит базовые свойства и методы для работы с XML-структурами; IXmlDomDocument2 - расширение интерфейса IXmlDomDocument, которое поддерживает схемы кэширования и функции проверки, включая поддержку XPath-выражений; IXmlDomDocument3 - продолжение IXmlDomDocument2 с двумя новыми методами importNode и validateNode.
Используя метод load или loadXML интерфейса IXmlDomDocument (описание методов представлено в MSDN), можно загрузить XML-документ, с которым в дальнейшем будет осуществляться работа.
Примечание. Начиная с Prognoz Platform версии 8.0 работа с XML-файлами осуществляется только через службы MSXML версии 6.0.
Sub Sample1;
Var
XMLDoc: IXMLDOMDocument;
XMLName: String = "c:\Data.xml";
Loaded: Boolean;
Begin
XMLDoc := New DOMDocument.Create;
Loaded := XMLDoc.load(XMLName);
If Loaded Then
//Дальнейшая работа с загруженным документом
//...
XMLDoc.save(XMLName);
End If;
End Sub Sample1;
Sub Sample2(strXML: String);
Var
XMLDoc: IXMLDOMDocument3;
Loaded: Boolean;
Begin
XMLDoc := New DOMDocument60.Create;
Loaded := XMLDoc.loadXML(strXML);
If Loaded Then
//Дальнейшая работа с загруженным документом
End If;
End Sub Sample2;
Для получения необходимых вершин используйте соответствующие свойства и методы интерфейса IXmlDomDocument:
Sub Sample3;
Var
XMLDoc: IXMLDOMDocument;
Loaded: Boolean;
Nodes: IXmlDomNodeList;
Node, NewNode: IXmlDomNode;
NewAttr: IXmlDomAttribute;
Begin
//Загрузка документа
//...
If Loaded Then
//Корневая вершина
Node := XMLDOc.documentElement;
//Получение вершин, дочерних для корневой вершины
Nodes := Node.childNodes;
//Получение необходимых вершин в соответствии с XPath-запросом
Nodes := XMLDOc.selectNodes("<XPath-запрос для отбора вершин>");
//Новая вершина
NewNode := XMLDOc.createNode("element", "Comments", "");
//Новый атрибут
для вершины
NewAttr := XMLDOc.createAttribute("text");
NewAttr.value := "Comment...";
NewNode.attributes.setNamedItem(NewAttr);
//Добавление созданной вершины в дерево
Node.appendChild(NewNode);
//Получение необходимой вершины в соответствии с XPath-запросом
Node := XMLDOc.selectSingleNode("<XPath-запрос для отбора вершины>");
//...
End Sub Sample3;
Ниже приведены различные примеры работы с XML-файлами:
Пример |
Работа с XML файлами через MSXML версии 6.0 |
Работа с разделом CDATA |
См. также: