Всех приветствую! Несколько лет писал на Матлабе, а тут приспичило на Дельфи программу написать.
Мне необходимо научиться работать с 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.ChildNodes['element1'].Text...
и в таком духе дальше по всем применяемым методам, процедурам, типам данных.
Где найти подобные мануалы/описания? Кто может помочь?
Если нужна конкретная задача, опишу её.
Имеется xml-документ вида:
LTM
fon.png
up.jpg
pano_u.jpg
pano_f.jpg
start.jpg
tmb.jpg
1910
768
512
1024
768
Some text
Some errortext
Other errortext
В коде программы имеем:
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. Проделать вышеописанное по отношению к узлам и элементам, являющимся дочерними по отношению к дочерним. В моём примере - узел
(дочерний по отношению к и родительский по отношению к и .
Если я правильно понимаю, надо как-то передать содержимое узла в переменную типа IXMLNode и делать то же, что и в п.1-3. Так?
5. Надо научиться изменять вышеуказанные параметры (задавать свои).
Вроде пока всё. На данном этапе мне важнее всего синтаксические конструкции.
Кто владеет этой темой, напишите пожалуйста и другие синтаксические конструкции для решения вышеописанных вопросов (как получить атрибуты, их кол-во, кол-во элементов, их имена и т. п.). Главное сейчас - овладеть синтаксисом, а свой алгоритм я уж реализую потом. Заранее всем огромное спасибо!
P.S. Очень не хотелось бы писать с нуля свой парсер XML только потому, что к имеющимся нет нормального описания. https://ru-delphi.livejournal.com/270951.html