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; |
|
12.10.2011, 18:25 | #2 |
Участник
|
Работа с xml реализована в кодеюните 6224 XML DOM Management (проверка существования нодов, получения их значений и атрибутов, дочерних нодов).
И да вложенность получается большая. Сам сейчас воюю с ними. Код: //пример проверки IF FindNode(XMLRootNode, 'Parameters', XMLNodeFound) THEN BEGIN XMLRootNode := XMLNodeFound; IF FindNode(XMLRootNode, 'PeriodStartingDate', XMLNodeFound) THEN BEGIN XMLRootNode := XMLNodeFound; // получение значения IF (STRLEN(XMLNodeFound.text) > 0) THEN curr:=XMLNodeFound.text ..... END END; Name DataType Subtype Length xmlNodeFound Automation 'Microsoft XML, v6.0'.IXMLDOMNode xmlRootNode Automation 'Microsoft XML, v6.0'.IXMLDOMNode |
|
13.10.2011, 08:23 | #3 |
Участник
|
Цитата:
Поставьте задачу залить в XML и из XML половину таблицу Навижна в структурированном виде (заказы продажи и покупки к примеру со всеми связанными справочниками) и откройте для себя мэппинг, генерацию и предвалидацию XSD схемами и множество других интересных вещей. |
|
13.10.2011, 12:06 | #4 |
Участник
|
|
|