TXMLDocument. Читает со второго атрибута [решено]

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
KUKA
новенький
Сообщения: 46
Зарегистрирован: 22.02.2012 20:54:19

TXMLDocument. Читает со второго атрибута [решено]

Сообщение KUKA »

Есть XML - файл

Код: Выделить всё

  <chars count="211">
    <char id="32" x="1021" y="0" width="1" height="1" xoffset="0" yoffset="0" xadvance="18" page="0" chnl="15" />
    ...

Долго не мог словить ошибку, почему значения не те, пока не вывел атрибут отдельно. Мне нужен атрибут id, получаю в качестве 0 атрибута x.

Код: Выделить всё

uses XMLRead, DOM;
var doc : TXMLDocument;
Child: TDOMNode;
begin
   ReadXMLFile(Doc, 'neon.fnt');
   Child := Doc.DocumentElement.FindNode('chars');
   writeln(Child.ChildNodes.item[0].Attributes.Item[0].NodeValue);
   readln();
end.


соответственно выводит 1021, а не 32
Последний раз редактировалось KUKA 13.07.2013 20:00:17, всего редактировалось 1 раз.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

KUKA писал(а):Child.ChildNodes.item[0].Attributes.Item[0].NodeValue

А если попробовать первый item[0] исключить из Вашего кода, что получится?
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Порядок атрибутов в XML не закреплен, парсер может располагать их произвольным образом, добавлять новые атрибуты и иногда удалять существующие. Поэтому нужно читать их только по имени, либо перебирать все.
KUKA
новенький
Сообщения: 46
Зарегистрирован: 22.02.2012 20:54:19

Сообщение KUKA »

На сайтах freepascal есть какие-нибудь спецификации классов и методов TDOMNode, TXMLRead\Write? Сколько искал есть только мануал. Или это только в исходники лезть?
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Модуль DOM в основном соответствует официальной спецификации W3C: http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113
Ее нет смысла дублировать на сайтах freepascal.
В модулях XMLRead и XMLWrite - по сути, одна процедура...
Аватара пользователя
vada
энтузиаст
Сообщения: 691
Зарегистрирован: 14.02.2006 12:43:17

Сообщение vada »

Ну да. Атрибуты по номерам... это себя не любить. :(
Ответить