Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > TXMLDocument и пустой ChildNodes


Автор: MrDmitry 9.1.2012, 22:03
Здравствуйте, столкнулся с такой проблемой.

Если в xml есть пустые значения то txmldocument стапорится на них и выводит ошибку 
list index out of bounds (0)

Вот кусочек кода как я парсирую xml

Код

XMLDocument1.Active:=true;

XMLDocument1.LoadFromFile('otvet.xml');

res.name := VarToStr(XMLDocument1.DocumentElement.ChildNodes['name'].ChildNodes[0].text);
res.surname := VarToStr(XMLDocument1.DocumentElement.ChildNodes['surname'].ChildNodes[0].text);
res.pat := VarToStr(XMLDocument1.DocumentElement.ChildNodes['patronymic'].ChildNodes[0].text);


....



Сам xml


Код

<?xml version="1.0"?>
<xml_data>
<name></name>
<surname></surname>
<patronymic></patronymic>
<sex>M</sex>
<birth>04.07.1901</birth>
<regdate>15.11.2011</regdate>
<bonus>10</bonus>
<type>0</type>
<discount>0</discount>
<success>1</success>
<balance>136.83</balance>
<total>0.00</total>
<quantity>70</quantity>
<lastdate>18.11.2011</lastdate>
</xml_data>



Извините что без форматирования. Но как видно в xml пункты name surname и patronymic пустые и именно на них вылетает данная ошибка. Как это можно обойти?

Автор: DarkProg 9.1.2012, 22:37
Ошибка не в XML - у меня великолепно живёт с пустыми и не жалуется ни импорт ни экспорт...

VarToStr - объясните зачем вот этот оператор вам сдался?

XMLDocument1.DocumentElement.ChildNodes['name'].ChildNodes[0].text - возвращает и так строковую величину(string) и если она пустая, то возвращается пустая строка.
Короче у вас возвращается string, а вот что с ним делать дальше - это уже сами решите, если должно храниться целое, то при необходимости преобразовываете в целое число...

Автор: MetalFan 9.1.2012, 22:42
MrDmitry, ну так проверить, сколько там детишек(>0), прежде, чем обращаться к ChildNodes['name'].ChildNodes[0]


DarkProg, ошибка list index out of bounds (0) возникает не из-за этого.

Автор: DarkProg 9.1.2012, 22:45
А точно, недоглядел...

Вот так надо 
Код

XMLReport.DocumentElement.ChildNodes['NAME'].Text

Автор: MrDmitry 9.1.2012, 23:04
Цитата(DarkProg @ 9.1.2012,  22:45)
А точно, недоглядел...

Вот так надо 
Код

XMLReport.DocumentElement.ChildNodes['NAME'].Text

Вот так заработало. Спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)