|
Не могу прочитать XML-документ в DELPHI | ☑ | ||
---|---|---|---|---|
0
Kseniya_
30.07.16
✎
10:21
|
Здравствуйте!
Уже раз 20 пробовала прочитать xml-документ в делфи - не получается. Не могу понять, в чем проблема. Создать xml-документ получилось, но прочитать из него не получается. Помогите, пожалуйста! Вот код сохранения: var Xml: IXMLDocument; begin Xml := TXMLDocument.Create (nil); Xml.Active := true; with Xml do begin with AddChild('Config') do begin with AddChild('User') do begin ChildValues['Id'] := 1; ChildValues['Name'] := 'ddd'; ChildValues['Status'] := 'Developer'; end; end; end; Xml.SaveToFile(ExtractFilePath(Application.ExeName) + 'In.xml'); Xml.Active := false; Вот код чтения: var Xml: IXMLDocument; begin try XML := TXMLDocument.Create(nil); Xml.LoadFromFile(ExtractFilePath(Application.ExeName) + 'In.xml'); Xml.Active := true; edit1.Text := VarToStr(Xml.DocumentElement.ChildNodes[0].ChildNodes['User'].ChildNodes['Id'].text); |
|||
1
Kseniya_
30.07.16
✎
10:22
|
Сохраняет вот так: <Config><User><Id>1</Id><Name>ddd</Name><Status>Developer</Status></User></Config>
|
|||
2
Горогуля
30.07.16
✎
10:43
|
(1) можно я ни черта в дельфийском коде не понял и не увидео объявление xml? положено бывать
|
|||
3
Kseniya_
30.07.16
✎
10:55
|
var
Xml: IXMLDocument; - объявление документа xml uses ... ComCtrls, XMLDoc, XMLIntf, xmldom; |
|||
4
H A D G E H O G s
30.07.16
✎
10:56
|
Страдай.
|
|||
5
H A D G E H O G s
30.07.16
✎
10:58
|
Я это один раз победил через кровь и пот, когда встречусь второй раз - изучу xml data provider
|
|||
6
Горогуля
30.07.16
✎
10:58
|
(3) вар - это объявление переменной. в 1Ске говорят ЗаписатьОбъявлениеXML. от этого получается что-то в духе <?xml version="1.0" encoding="UTF-8"?> и всё такое. короче, выдаётся валидный документ. читай про валидность
|
|||
7
H A D G E H O G s
30.07.16
✎
11:00
|
(6) Дельфи похер на объявление
|
|||
8
Горогуля
30.07.16
✎
11:01
|
(7) ээ.. а как они с этим живут?
|
|||
9
Горогуля
30.07.16
✎
11:05
|
коллеги, напомните про валидность хмл. бывает вон такое незакрывающееся объявление, а потом один(один!) корневой узел со всякими прочими рюшками. мож, я где-то перепохмелился ;)
|
|||
10
H A D G E H O G s
30.07.16
✎
11:06
|
Считают если заголовка нет - то он дефолтнный
|
|||
11
H A D G E H O G s
30.07.16
✎
11:06
|
||||
12
Горогуля
30.07.16
✎
11:07
|
(10) щас ветку найду. у товарища сервер не принимал с заголовокм
|
|||
13
Горогуля
30.07.16
✎
11:10
|
+(12) ну и как бы это..хмл без заголовка - текстовый документ с кучей тэгов
|
|||
14
Горогуля
30.07.16
✎
11:11
|
(12) вот она: Запись XML
|
|||
15
Kseniya_
30.07.16
✎
11:31
|
Всем Спасибо! Все получилось!
Я, кажется, указывала лишний корень при обращении к элементу при чтении! ВОт запись: var Node: IXMLNode; Xml: IXMLDocument; begin try Xml := NewXMLDocument(); //Xml.Version := '1.0'; Xml.Encoding := 'utf-8'; Xml.Active := true; // ??????? Node := Xml.AddChild('Main'); Node.Attributes ['arr1'] := '111'; Node.Attributes ['arr2'] := '222'; Node.Attributes ['arr3'] := '333'; Xml.SaveToFile('C:/input.xml');//ExtractFilePath(Application.ExeName) + 'In.xml'); Xml.Active := false; Вот чтение: var Xml: IXMLDocument; begin //?????? xml try XML := NewXMLDocument(); Xml.Active := true; Xml.LoadFromFile('C:/input.xml');//ExtractFilePath(Application.ExeName) + 'In.xml'); edit1.Text := VarToStr(Xml.DocumentElement.Attributes['arr1']); {??? ?? ??????? ??????} Xml.Active := false; |
|||
16
Горогуля
30.07.16
✎
11:34
|
(15) >edit1.Text := VarToStr(Xml.DocumentElement.Attributes['arr1']); {??? ?? ??????? ??????}
что за едит1? ну помогло и помогло. на здоровье |
|||
17
Kseniya_
30.07.16
✎
11:44
|
(16) Это текстовое поле просто временное для того, чтобы посмотреть, что прочиталось.
|
|||
18
Горогуля
30.07.16
✎
11:49
|
>Xml.DocumentElement.Attributes['arr1']
как-то не вижу "лишний корень при обращении к элементу при чтении". спишем на близорукость. чего было-то? |
|||
19
Kseniya_
30.07.16
✎
13:03
|
(18) Я делала так, лишнее ChildNodes все время добавляла, думала, что нужно Xml.DocumentElement.ChildNodes['main'].Attributes['d1'])
|
|||
20
Garykom
гуру
30.07.16
✎
13:49
|
ExtractFilePath(Application.ExeName) + "\" + 'In.xml'
|
|||
21
Garykom
гуру
30.07.16
✎
13:50
|
(20)+ Точнее лучше сделать проверку на последний символ ExtractFilePath(Application.ExeName) и если <>"\" тогда добавляем
|
|||
22
Kseniya_
30.07.16
✎
16:12
|
(21) ExtractFilePath(Application.ExeName) в делфи всегда прибавляет этот символ "\"
|
|||
23
Garykom
гуру
30.07.16
✎
16:37
|
(22) Я тоже когда то так думал ))
|
|||
24
Garykom
гуру
30.07.16
✎
16:41
|
(23)+ Но это мелочи что легко перепутать с ExtractFileDir, есть другая проблема иногда багов работы разных "дельфи" под разными ОСями.
|
|||
25
NorthWind
30.07.16
✎
19:25
|
(5) да ладно, где там особый кровь и пот... вроде нормально и читал и писал. Головная боль там начинается, когда хочешь использовать xpath - очень непрозрачное использование запросов. А так ничо
|
|||
26
H A D G E H O G s
05.08.16
✎
20:50
|
Я изучил Data Binder.
Работать с XML в Дельфи с DB еще проще, чем в 1С с его XDTO. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |