Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2013, 16:59   #1
st_tsourkan
 
Регистрация: 21.10.2013
Сообщений: 4
По умолчанию Как работать с XML документами при помощи TXMLDocument в Delphi?

Всех приветствую! Мне необходимо научиться работать с xml-документами. Работаю в RAD Stiduo XE3. Там есть компонент TXMLDocument, наверно, известный многим программящим на Delphi. Вроде бы и умеет много. Но проблема в том, что по нему нет понятной документации и описания. Хэлп в RAD Studio - фигня, потому что нормальной информации там нет; только разбросанная по страницам скудная справка по некоторым методам и процедурам (без примеров и нормального описания). Перерыл весь инет. Нашёл только темы на форумах с решением конкретных задач, где надо ещё час разбираться что делает та или иная строка, связанная с обращением к xml-файлу.
Мне же нужно руководство по основным функциям, процедурам и методам, применяемым при работе с xml. Учебник, мануал, описание. Или хотя бы "xml в Delphi для чайников". Например:

Для открытия xml-файла используем метод XMLDocument1.LoadFromFile('filemane .xml'), где filename - имя файла.
Переменная nodelist типа IXMLNode служит для хранения списка дочерних элементов. Для определения этого списка служит метод Xmldocument1.DocumentElement (где XMLDocument1 - исследуемый xml-файл).
Чтобы запросить содержимое дочернего элемента 'element1' используется метод XMLDocument1.DocumentElement.ChildN odes['element1'].Text...

и в таком духе дальше по всем применяемым методам, процедурам, типам данных.
Где найти подобные мануалы/описания? Кто может помочь?

Если нужна конкретная задача, опишу её.
Имеется xml-документ вида:

Код:
<ltm version="1.0" type="settings" >
<progname>LTM</progname>
 
<templateFiles>
    <assets>fon.png</assets>
    <assets>up.jpg</assets>
    <images>
        <pano>
            <tiles>pano_u.jpg</tiles>
            <tiles>pano_f.jpg</tiles>
        </pano>
        <tour>
            <tourimages>start.jpg</tourimages>
            <tourimages>tmb.jpg</tourimages>
        </tour>
    </images>
</templateFiles>
<dimensions>
    <tiles type="pc">1910</tiles>
    <tiles type="ipad">768</tiles>
    <tiles side="iphone">512</tiles>
    <tourimages name="start.jpg" edge="long">1024</tourimages>
    <tourimages name="start.jpg" edge="short">768</tourimages>
</dimensions>
 
<hotspot name="hs015_2" style="mappoint" scena="scene017" ath="68.17644363437007" />
<hotspot name="hs015_1" style="mappoint" scena="scene014" rz="4436007"  />          
<data name="onstart" mode="noVoice">Some text</data>
<data name="onerror" mode="noVoice">Some errortext</data>
<data name="onerror" mode="alarm">Other errortext</data>
 
</ltm>
В коде программы имеем:
Код:
var
...
parent, child1: IXMLNode;
 
begin
XMLDocument1.LoadFromFile('f:\filename.xml');
XMLDocument1.Active:=true;
.
.
end
Что надо научиться делать:
(заранее извиняюсь, если неверно называю составляющие xml-документа)
1. Получить имя корневого элемента (в нашем случае ltm), а также список его атрибутов (version, type) и их значения ('1.0', 'settings').
2. Получить количество элементов, являющихся дочерними по отношению к корневому. В данном случае их 7: templateFiles, dimensions, hotspot, hotspot, data, data, data. Получить имена элементов (тэгов) (templateFiles, dimensions и т. п.). Получив количество элементов и научившись извлекать их имена, я прогоню цикл от 0 до count-1 и сделаю что мне нужно.
3. Получить количество и список атрибутов требуемого элемента. Например, для элемента hotspot. Правильный ответ будет 4 атрибута. Для первого элемента hotspot это будут name, style, scena, ath. Для второго - то же, только вместо атрибута ath - атрибут rz.
Заметьте, в файле 2 элемента hotspot, с разными атрибутами. Вот как с ними работать (если одноимённых элементов больше 1)?
Я хочу так: получаю список дочерних элементов по отн. к корневому (см. п. 2), прогоняю по ним цикл с for и найду элементы hotspot, у которых параметр name равен требуемому (скажем 'hs015_2' - такой элемент будет заведомо один). Можно ли как-то решить этот вопрос без цикла? То есть, получить значение атрибута scena для элемента hotspot, у которого name="hs015_2"?
4. Проделать вышеописанное по отношению к узлам и элементам, являющимся дочерними по отношению к дочерним. В моём примере - узел <images> (дочерний по отношению к <templateFiles> и родительский по отношению к <pano> и <tiles>.
Если я правильно понимаю, надо как-то передать содержимое узла <images> в переменную типа IXMLNode и делать то же, что и в п.1-3. Так?

5. Надо научиться изменять вышеуказанные параметры (задавать свои).

Вроде пока всё. На данном этапе мне важнее всего синтаксические конструкции.
Кто владеет этой темой, напишите пожалуйста и другие синтаксические конструкции для решения вышеописанных вопросов (как получить атрибуты, их кол-во, кол-во элементов, их имена и т. п.). Главное сейчас - овладеть синтаксисом, а свой алгоритм я уж реализую потом. Заранее всем огромное спасибо!
st_tsourkan вне форума Ответить с цитированием
Старый 22.10.2013, 12:19   #2
igh0st
Форумчанин
 
Аватар для igh0st
 
Регистрация: 05.07.2010
Сообщений: 136
По умолчанию

Получить имя корневого элемента
XMLDocument1.ChildNodes[0].NodeName

Список его аттрибутов получается в цикле от 0 до XMLDocument1.ChildNodes[0].AttributeNodes.Count - 1

Имя аттрибута
XMLDocument1.ChildNodes[0].AttributeNodes.Get(I).NodeName;

Получить количество элементов, являющихся дочерними по отношению к корневому
XMLDocument1.ChildNodes[0].ChildNodes.Count

Остальное по аналогии, если что-то непонятно - смотри в выпадающем списке синтаксис-помощнике, там и методы и поля объектов все расписаны )))


Последний раз редактировалось igh0st; 22.10.2013 в 12:31.
igh0st вне форума Ответить с цитированием
Старый 22.10.2013, 14:08   #3
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
только разбросанная по страницам скудная справка по некоторым методам и процедурам (без примеров и нормального описания). Перерыл весь инет.
да ладно, а инете инфы не перелопатить
http://www.bing.com/search?q=delphi+...lt&FORM=IE10TR
eval вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсинг XML с использованием TXMLDocument ВанекПВМ Компоненты Delphi 3 05.02.2013 10:54
Qt + XML Программа работы с документами Nikiforov_Alex Фриланс 0 08.12.2010 08:40
Работать в Word, не открывая документы (работа с закрытыми документами Word) Георгиевич Microsoft Office Word 10 07.09.2009 11:19
Управление Ecxel при помощи Delphi nikolai_P Общие вопросы Delphi 9 12.03.2009 09:00
Как работать с XML? Никки Общие вопросы Delphi 7 18.01.2008 00:56