12.10.2011, 17:14 | #1 |
Участник
|
Доброго времени суток!
Помогите пожалуйста разобраться с парсингом xml документа. Я нашёл по этой теме такую ссылку http://naviart.ru/read-xml-from-nav но что-то не получается у меня сделать как там описано. Возможно из-за непонимания неких основ XML. Как мне кажется getAttributeNode это чтение именно атрибута тега, если так, то в моё xml документе не используются атрибуты. По сути, я сделал более менее работающее решение, но мне кажется, что это можно сделать правильней, а соответственно и лучше. Ну а если лучше не получится, может кому пригодиться И так, на входе у меня xml с вложенной структурой, в тегах не используются параметры. Выглядит этот xml примерно так: Код: <?xml version="1.0" standalone="no" ?> <Exports> <Parameters> <PeriodStartingDate>11.10.2011</PeriodStartingDate> <PeriodEndingDate>11.10.2011</PeriodEndingDate> </Parameters> <Contragents> <Contragent> <ContragentNo>123456789</ContragentNo> <ContragentType>0</ContragentType> </Contragent> <Contragent> <ContragentNo>987654321</ContragentNo> <ContragentType>1</ContragentType> </Contragent> </Contragents> </Exports> Распарсиваю я его следующим образом: Код: XMLNodeList1 := XMLDOMDoc.childNodes(); XMLDOMElement1 := XMLNodeList1.item(1); IF XMLDOMElement1.nodeName = 'Exports' THEN BEGIN XMLNodeList2 := XMLDOMElement1.getElementsByTagName('Parameters'); XMLDOMElement2 := XMLNodeList2.item (0); XMLNodeList3 := XMLDOMElement2.getElementsByTagName('PeriodStartingDate'); XMLDOMElement3 := XMLNodeList3.item (0); MESSAGE (XMLDOMElement3.text); XMLNodeList3 := XMLDOMElement2.getElementsByTagName('PeriodEndingDate'); XMLDOMElement3 := XMLNodeList3.item (0); MESSAGE (XMLDOMElement3.text); XMLNodeList2 := XMLDOMElement1.getElementsByTagName('Contragents'); XMLDOMElement2 := XMLNodeList2.item (0); XMLNodeList3 := XMLDOMElement2.getElementsByTagName('Contragent'); FOR i := 0 TO XMLNodeList3.length-1 DO BEGIN XMLDOMElement3 := XMLNodeList3.item (i); XMLNodeList4 := XMLDOMElement3.getElementsByTagName('ContragentNo'); XMLDOMElement4 := XMLNodeList4.item (0); MESSAGE (XMLDOMElement4.text); XMLNodeList4 := XMLDOMElement3.getElementsByTagName('ContragentType'); XMLDOMElement4 := XMLNodeList4.item (0); MESSAGE (XMLDOMElement4.text); END; END; |
|