Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > XML delphi


Автор: golfV 1.12.2009, 13:16
Всем привет!

никак немогу разобраться с XML, надо из XML файла вытащить нужую инфу
Код

<root>
  <MEASDATA>STD</MEASDATA> 
  <STN>397</STN> 
  <TYPE>Syborg6R11F,99</TYPE> 
  <DUT>TR42937263,HRY 901 06/1,R1B</DUT> 
  <PROG>SMU Funtion Test,CAL 105 2041,R3</PROG> 
  <CRITERIA>3/15243-HRY 901 06/1,E,2004-11-18</CRITERIA> 
  <RESULT>ERROR</RESULT> 
  <START>2007-06-22 09:50:29</START> 
  <STOP>2007-06-22 13:03:00</STOP> 
  <OPER>111111</OPER> 
  <DUTNOTE>Error:85:Scan From String (arg 1) in F_Osc-GetOscilloscopeType.vi->G_PPR-PreRun+</DUTNOTE> 
  <END /> 
  </root>

надо вытащить эту строчку  <DUT>TR42937263,HRY 901 06/1,R1B</DUT> и занеси эти 3 знечения  в разные переменные,
некак неполучается хотя бы вытщить эту строчку. Использую IXMLDocument. Подскажите как это сделать?

Автор: golfV 3.12.2009, 16:39
Неужели нельзя вытащить эту информацию? 

Автор: Dom 3.12.2009, 23:51
Ну например что-то вроде такого может поможет
XMLDoc.DocumentElement.ChildNodes.Nodes['DUT'].NodeValue;
или
XMLDoc.DocumentElement.ChildValues['DUT'];
на счет второго вариант не вполне уверен

В хелпе все достаточно подробно должно быть описано насколько я помню.

Автор: golfV 4.12.2009, 09:54
Да я в принципи так и делаю
Код

var XMLDoc: IXMLDocument;

begin
  XMLDoc := TXMLDocument.Create(nil);
  XMLDoc.LoadFromFile('C:\test.xml');
  XMLDoc.DocumentElement.ChildNodes.Nodes['DUT'].NodeValue;


ошибок не выдает, только вот как этот результат куда нибудь в переменую записать или в ListBox вывести? 

Автор: golfV 4.12.2009, 11:42
кое в чем разобрался сделал вот так
Код

 XMLDoc := TXMLDocument.Create(nil);
  XMLDoc.LoadFromFile('C:\test.xml');
  XMLDoc.Active := true ;
  Node := XMLDoc.DocumentElement.ChildNodes[0];
  ListBox1.Items.Add(Node.ChildNodes[0].Text);

выводит "STD",  вот как сделать чтоб он по всему файлу пробежался и вытащил информацию некак немогу разобраться
если ставлю так
Код

Node := XMLDoc.DocumentElement.ChildNodes[1];
  ListBox1.Items.Add(Node.ChildNodes[1].Text);

то выдает ошибку, подскажите как вытащить всю инфу?

Автор: Dom 4.12.2009, 12:20
Код

Node := XMLDoc.DocumentElement.ChildNodes[0];
  ListBox1.Items.Add(Node.ChildNodes[1].Text);


А если так? Должно выдать 397.
Кажется вспоминаю как работать со стандартным парсером.
XMLDoc.DocumentElement.ChildNodes[0] указывает на первый узел в документе - это root. А вот его дочерние узлы это уже MEASDATA, STN и т.д.
Т.е. при обращении Node := XMLDoc.DocumentElement.ChildNodes[1] должно выдавать ошибку т.к. этот узел не существует в документе (узлов на одном уровне с root нет).

Автор: golfV 4.12.2009, 12:46
разобрался надо было чтоб вытащить 397 сделать так
Код

Node := XMLDoc.DocumentElement.ChildNodes[1];
ListBox1.Items.Add(Node.ChildNodes[0].Text);

а вот как сделать чтоб цыклом по файлу пробежаться вот некак немогу догадаться?

Автор: Dom 5.12.2009, 07:32
Код

    for i := 0 to XML.DocumentElement.ChildNodes.Count - 1 do
      Memo1.Lines.Add(XML.DocumentElement.ChildNodes[i].NodeValue);


Только на последнем узле код выдаст ошибку, т.к. узел <END /> в приведенном фрагменте хмл пустой.

Автор: golfV 7.12.2009, 09:33
Спасибо, буду разбираться

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