Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Чтение XML файла / 20 сообщений из 20, страница 1 из 1
08.08.2007, 11:48
    #34713272
Морик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение XML файла
Создать XML файл программно у меня получилось, примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
ar doc : TXMLDocument;
nd,sndIXMLNode;
i:integer;
 begin 
doc:=TXMLDocument.Create( nil );
doc.Active:=true;
doc.Version:='1.0';
doc.Encoding:='windows-1251';
nd:=doc.AddChild('Товары');
nd.Attributes['Всего']:= 10 ;
       For  i:= 1   to   10   do 
       begin 
        snd:=nd.AddChild('Товарная позиция');
        snd.Attributes['номер']:=i;
                  snd.ChildValues ['DepOrdDate'] := 'Дата;
                  snd.ChildValues ['Department'] := 'Подразделение';
                  snd.ChildValues ['Tarif'] := 'Тариф';
      end;
doc.SaveToFile('c:\ 1 .xml');

Не могу понять, как при помощи этого же TXMLDocument обращаться к готовому файлу, и что либо из него читать?
...
Рейтинг: 0 / 0
08.08.2007, 11:52
    #34713284
phoenix323F
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение XML файла
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 procedure  TForm1.ParseXML(FileName:  String );
 var 
  BorlandStock: IXMLNode;
  Price:  string ;
 begin 
  XMLDoc.LoadFromFile(FileName);
  XMLDoc.Active := True;
  BorlandStock := XMLDoc.DocumentElement.ChildNodes[ 0 ];
   //и т.д. 
 end ;
...
Рейтинг: 0 / 0
08.08.2007, 12:15
    #34713387
Морик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение XML файла
ругается...
---------------------------
xml
---------------------------
Access violation at address 004600A9 in module 'xml.exe'. Write of address 8B8E6AAB.
---------------------------
ОК
---------------------------
...
Рейтинг: 0 / 0
08.08.2007, 12:48
    #34713573
Морик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение XML файла
Разобрался. все работает
...
Рейтинг: 0 / 0
08.08.2007, 12:49
    #34713576
phoenix323F
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение XML файла
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
 procedure  TForm1.Button1Click(Sender: TObject);
 var 
  doc     : TXMLDocument;
  nd, snd, mnd : IXMLNode;
  i       : integer;
 begin 
  doc:=TXMLDocument.Create( nil );
  doc.Active:=true;
  doc.Version:='1.0';
  doc.Encoding:='windows-1251';
  nd:=doc.AddChild('Товары');
  nd.Attributes['Всего'] :=  10 ;


   for  i:= 1   to   10   do   begin 
        snd := nd.AddChild('Товарная_позиция');
        snd.Attributes['номер']:=i;
        mnd := snd.AddChild('DepOrdDate');
        mnd.NodeValue := 'Дата';
        mnd := snd.AddChild('Department');
        mnd.NodeValue := 'Подразделение';
        mnd := snd.AddChild('Tarif');
        mnd.NodeValue := 'Тариф';
   end ;
  doc.SaveToFile('c:\1.xml');
  doc.Free;
 end ;

 procedure  TForm1.Button2Click(Sender: TObject);
 var 
  doc: TXMLDocument;
 begin 
   try 
    doc:=TXMLDocument.Create( nil );
    doc.LoadFromFile('c:\1.xml');
    doc.Active:=true;
    ShowMessage(FormatXMLData(doc.XML.Text));
   finally 
    doc.Free;
   end ;
 end ;
...
Рейтинг: 0 / 0
08.08.2007, 13:38
    #34713817
Морик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение XML файла
А как проверить, существует ли определенный узел?
...
Рейтинг: 0 / 0
08.08.2007, 14:40
    #34714080
phoenix323F
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение XML файла
Код: plaintext
doc.ChildNodes.FindNode()
...
Рейтинг: 0 / 0
09.08.2007, 13:44
    #34716936
Морик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение XML файла
phoenix323F
Код: plaintext
doc.ChildNodes.FindNode()


Но таким образом мы сразу же должны присвоить найденный элемент чему либо.
А мне просто надо узнать мол если элемент есть то делать тото, если его не существует то ничего не делать.
...
Рейтинг: 0 / 0
09.08.2007, 14:01
    #34717031
Чтение XML файла
а какой uses подключить для TXMLDocument ?
...
Рейтинг: 0 / 0
09.08.2007, 14:04
    #34717047
Морик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение XML файла
интересуюсьа какой uses подключить для TXMLDocument ?
msxml, xmldom, XMLIntf, msxmldom, XMLDoc;
...
Рейтинг: 0 / 0
10.08.2007, 08:34
    #34718762
Морик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение XML файла
Как проверить, существует узел или нет????
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
05.02.2019, 12:30
    #39769592
Tim Woo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение XML файла
Дабы не плодить дубли

Есть xml
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<?xml version="1.0" encoding="utf-8"? >
<reginfo>
	<mac></mac>
	<ip></ip>
	<pc></pc>
	<id></id>
	<register>false</register>
</reginfo>



Есть кусок кода:
Код: pascal
1.
2.
3.
4.
XML := TXMLDocument.Create(Application);
XML.LoadFromXML(Report);
XML.Active := True;
RegRes := VarToStr(XML.DocumentElement.ChildNodes['reginfo'].Attributes['register']);



Но почему то RegRes = ''. Если вытаскивать отдельно Variant, тоже возвращается nil.
В чем ошибка?
...
Рейтинг: 0 / 0
05.02.2019, 12:36
    #39769598
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение XML файла
Tim WooЕсть xml
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<?xml version="1.0" encoding="utf-8"? >
<reginfo>
	<mac></mac>
	<ip></ip>
	<pc></pc>
	<id></id>
	<register>false</register>
</reginfo>



Есть кусок кода:
Код: pascal
1.
2.
3.
4.
XML := TXMLDocument.Create(Application);
XML.LoadFromXML(Report);
XML.Active := True;
RegRes := VarToStr(XML.DocumentElement.ChildNodes['reginfo'].Attributes['register']);



Но почему то RegRes = ''. Если вытаскивать отдельно Variant, тоже возвращается nil.
В чем ошибка?
register не атрибут узла reginfo, а подузел.
Атрибут - это когда <reginfo register="false" />
...
Рейтинг: 0 / 0
05.02.2019, 12:36
    #39769599
ma1tus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение XML файла
...
Рейтинг: 0 / 0
05.02.2019, 12:38
    #39769600
Tim Woo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение XML файла
Если я правильно понял, то получается должно быть так:
Код: pascal
1.
XML.DocumentElement.ChildNodes['reginfo'].ChildNodes['register'].NodeValue


Однако, результат тот же.
...
Рейтинг: 0 / 0
05.02.2019, 12:51
    #39769608
Tim Woo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение XML файла
upd

Разобрался:
XML.DocumentElement.ChildNodes['register'].NodeValue

Но все же остались вопрос: Почему не нужно указывать ChildNodes['reginfo']?
...
Рейтинг: 0 / 0
05.02.2019, 12:51
    #39769609
ma1tus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение XML файла
Tim Woo
Код: pascal
1.
XML.DocumentElement.ChildNodes['reginfo'].ChildNodes['register'].NodeValue

красное ненужно
...
Рейтинг: 0 / 0
05.02.2019, 13:28
    #39769636
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение XML файла
Tim Woo upd

Разобрался:
XML.DocumentElement.ChildNodes['register'].NodeValue

Но все же остались вопрос: Почему не нужно указывать ChildNodes['reginfo']?
DocumentElement - это и есть узел reginfo.

Из справки:
TXMLDocument.DocumentElement

Provides access to the root node of the XML document.
...
Рейтинг: 0 / 0
05.02.2019, 20:25
    #39769847
Tim Woo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение XML файла
Еще 1 вопрос.
Как посчитать число нодов, соответствующих определенному имени?

На примере такого xml, посчитать сколько comp и сколько user
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<?xml version="1.0" encoding="utf-8" ?>
<data>
	<comp>
		<ip></ip>
		<name></name>
	</comp>
	<user>
		<id></id>
		<login></login>
	</user>

	Вышеописанные ноды повторяются множество раз
	
</data>



Заранее спасибо за ответ!
...
Рейтинг: 0 / 0
06.02.2019, 09:49
    #39769951
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение XML файла
Пробежать по всем ChildNodes и проверить NodeName? В чем сложность-то?
Либо, если лениво, то Document.SelectByXPath('/data/comp').Count (названия условные)
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Чтение XML файла / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]