Форум программистов, компьютерный форум, киберфорум
Ales'hon'ne
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Обёртка к классу TXmlDocument

Запись от Ales'hon'ne размещена 07.08.2012 в 19:41
Показов 3447 Комментарии 0

Не по теме:

Немного напоминает XPath, но всё же не оно.


Достоиства:
  • лаконичный код;
  • с первого взгляда понятно, к какому элементу происходит обращение;
  • удобный доступ по атрибутам;
Недостатки:
  • медленная работа;
  • неоптимальный код;
  • может работать не так, как ожидалось;
  • для совершения некоторых действий нужно пошаманить;
Кроме того, модуль наследует все достоинства и недостатки TXmlDocument.
Демонстрация работы модуля (скомпилированная программа: Project1.zip):

Что было (спёрто с Википедии):
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>
<recipe name="хлеб" preptime="5" cooktime="180">
  <title>Простой хлеб</title>
  <composition>
    <ingredient amount="3" unit="стакан">Мука</ingredient>
    <ingredient amount="0.25" unit="грамм">Дрожжи</ingredient>
    <ingredient amount="1.5" unit="стакан">Тёплая вода</ingredient>
    <ingredient amount="1" unit="чайная ложка">Соль</ingredient>
  </composition>
  <instructions>
    <step>Смешать все ингредиенты и тщательно замесить.</step>
    <step>Закрыть тканью и оставить на один час в тёплом помещении.</step>
    <step>Замесить ещё раз, положить на противень и поставить в духовку.</step>
  </instructions>
</recipe>
Что делалось:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Введите имя файла:
> z:\tmp\1.xml
Файл найден!
Файл открыт!
> recipe\title:="Магический хлеб"
@null
> recipe\composition\ingredient|count
4
> recipe\composition\ingredient[4]:="Эликсир маны"
@null
> recipe\composition\ingredient[4].amount:="0.25"
@null
> recipe\composition\ingredient[4].unit:="колба"
@null
> recipe\warning:="Применять с осторожностью! Возможны сверхъестественные последствия."
@null
> @save
Сохранено!
> recipe\composition\ingredient[amount="0.25"]|count
2
> recipe\composition\ingredient[0]
Мука
> recipe\composition\ingredient[0].unit
стакан
> recipe\instructions\step|count
3
> recipe\instructions\step[0]
Смешать все ингредиенты и тщательно замесить.
> recipe\instructions\step[0].comment|exists
False
> recipe\instructions\step[1]
Закрыть тканью и оставить на один час в тёплом помещении.
> recipe\instructions\step[2]
Замесить ещё раз, положить на противень и поставить в духовку.
> recipe\instructions\step[3]|exists
False
> @exit
Что получилось:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="UTF-8"?>
<recipe name="хлеб" preptime="5" cooktime="180">
  <title>Магический хлеб</title>
  <composition>
    <ingredient amount="3" unit="стакан">Мука</ingredient>
    <ingredient amount="0.25" unit="грамм">Дрожжи</ingredient>
    <ingredient amount="1.5" unit="стакан">Тёплая вода</ingredient>
    <ingredient amount="1" unit="чайная ложка">Соль</ingredient>
    <ingredient amount="0.25" unit="колба">Эликсир маны</ingredient>
  </composition>
  <instructions>
    <step>Смешать все ингредиенты и тщательно замесить.</step>
    <step>Закрыть тканью и оставить на один час в тёплом помещении.</step>
    <step>Замесить ещё раз, положить на противень и поставить в духовку.</step>
  </instructions>
  <warning>Применять с осторожностью! Возможны сверхъестественные последствия.</warning>
</recipe>
Краткая документация
Создание:
Delphi
1
2
3
xml:=TXmlPathDoc.Create('c:\file.xml');//из файла
xml:=TXmlPathDoc.Create(stream,false);//из потока, если true, то конструктор освободит поток
xml:=TXmlPathDoc.CreateXml('<root><element v="1"/></root>')//из строки
Чтение данных:
Delphi
1
2
v:=xml.GetData('root\element.v');
v:=xml.ExecQuery('root\element.v');
Запись данных:
Delphi
1
2
xml.SetData('root\element.v',1);
xml.ExecQuery('root\element.v:="1"');
Сохранение:
Delphi
1
2
xml.SaveToFile('c:\file.xml');
xml.SaveToStream(stream);
Удаление:
Delphi
1
xml.DeleteElement('root\element');
Работа стандартными средствами:
Delphi
1
2
3
xml.Document;//IXmlDocument
xml.Root;//IXmlNode,=xml.Document.DocumentElement;
xml.GetNode('root\element');//IXmlNode
Вложения
Тип файла: zip XmlPath.zip (4.8 Кб, 251 просмотров)
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Video: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru