delphi 2010 can't read xml node -
i using delphi 2010 , txmldocument
. have xml this:
<?xml version="1.0" encoding="utf-8" standalone="no"?> <?xml-stylesheet type="text/xsl" href="http://www.xxxxx"?> <izdaniracunenostavni xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:nonamespaceschemalocation="http://www.xxxxxxx"> <racun id="data"> <glavaracuna> <vrstaracuna>380</vrstaracuna> <stevilkaracuna>420-16</stevilkaracuna> <funkcijaracuna>9</funkcijaracuna> </glavaracuna> <lokacije> <vrstalokacije>91</vrstalokacije> <nazivlokacije>novo mesto</nazivlokacije> </lokacije> <valuta> <vrstavaluteracuna>2</vrstavaluteracuna> <kodavalute>eur</kodavalute> </valuta> <referencnidokumenti vrstadokumenta="on"> <stevilkadokumenta>ni podano</stevilkadokumenta> <datumdokumenta>2016-06-03t00:00:00.000</datumdokumenta> </referencnidokumenti> <referencnidokumenti vrstadokumenta="aak"> <stevilkadokumenta>268,269/d</stevilkadokumenta> <datumdokumenta>2016-06-03t00:00:00.000</datumdokumenta> </referencnidokumenti> <referencnidokumenti vrstadokumenta="aab"> <stevilkadokumenta>ni podano</stevilkadokumenta> <datumdokumenta>2016-06-03t00:00:00.000</datumdokumenta> </referencnidokumenti> <podatkipodjetja> <nazivnaslovpodjetja> <vrstapartnerja>ii</vrstapartnerja> <identifikacijapartnerja> <stevilkapartnerja>9999</stevilkapartnerja> <agencija>91</agencija> </identifikacijapartnerja> <nazivpartnerja> <nazivpartnerja1>xxxxx</nazivpartnerja1> <nazivpartnerja2 /> <nazivpartnerja3 /> <nazivpartnerja4 /> </nazivpartnerja> <ulica> <ulica1>xxxxx</ulica1> <ulica2 /> <ulica3 /> <ulica4 /> </ulica> <kraj>xxxxx</kraj> <nazivdrzave>slovenija</nazivdrzave> <postnastevilka>8000</postnastevilka> <kodadrzave>si</kodadrzave> </nazivnaslovpodjetja> <financnipodatkipodjetja> <tipinstitucije>rb</tipinstitucije> <bancniracun> <stevilkabancnegaracuna>xxxx</stevilkabancnegaracuna> <nazivbanke1>xxxx</nazivbanke1> <nazivbanke2 /> </bancniracun> <kodadrzavebanke>si</kodadrzavebanke> </financnipodatkipodjetja> <financnipodatkipodjetja> <tipinstitucije>rb</tipinstitucije> <bancniracun> <stevilkabancnegaracuna>xxxx</stevilkabancnegaracuna> <nazivbanke1>xxxxx</nazivbanke1> <nazivbanke2 /> </bancniracun> <kodadrzavebanke>si</kodadrzavebanke> </financnipodatkipodjetja> <referencnipodatkipodjetja> <vrstapodatkapodjetja>va</vrstapodatkapodjetja> <podatekpodjetja>xxxx</podatekpodjetja> </referencnipodatkipodjetja> <referencnipodatkipodjetja> <vrstapodatkapodjetja>gn</vrstapodatkapodjetja> <podatekpodjetja>1358120</podatekpodjetja> </referencnipodatkipodjetja> <referencnipodatkipodjetja> <vrstapodatkapodjetja>xa</vrstapodatkapodjetja> <podatekpodjetja>1/04065/00</podatekpodjetja> </referencnipodatkipodjetja> <kontaktipodjetja> <komunikacije> <stevilkakomunikacije>xxxxx</stevilkakomunikacije> <vrstakomunikacije>te</vrstakomunikacije> </komunikacije> <komunikacije> <stevilkakomunikacije>xxxxx</stevilkakomunikacije> <vrstakomunikacije>fx</vrstakomunikacije> </komunikacije> <komunikacije> <stevilkakomunikacije /> <vrstakomunikacije>em</vrstakomunikacije> </komunikacije> </kontaktipodjetja> </podatkipodjetja> <podatkipodjetja> <nazivnaslovpodjetja> <vrstapartnerja>by</vrstapartnerja> <identifikacijapartnerja> <stevilkapartnerja>0549</stevilkapartnerja> <agencija>91</agencija> </identifikacijapartnerja> <nazivpartnerja> <nazivpartnerja1>xxxx</nazivpartnerja1> <nazivpartnerja2>xxxx</nazivpartnerja2> <nazivpartnerja3 /> <nazivpartnerja4 /> </nazivpartnerja> <ulica> <ulica1>xxxx</ulica1> <ulica2 /> <ulica3 /> <ulica4 /> </ulica> <kraj>xxx</kraj> <nazivdrzave>slovenija</nazivdrzave> <postnastevilka>8000</postnastevilka> <kodadrzave>si</kodadrzave> </nazivnaslovpodjetja> <financnipodatkipodjetja> <tipinstitucije>rb</tipinstitucije> <bancniracun> <stevilkabancnegaracuna>xxxx</stevilkabancnegaracuna> <nazivbanke1 /> <nazivbanke2 /> </bancniracun> <kodadrzavebanke>si</kodadrzavebanke> </financnipodatkipodjetja> <referencnipodatkipodjetja> <vrstapodatkapodjetja>va</vrstapodatkapodjetja> <podatekpodjetja>xxxxx</podatekpodjetja> </referencnipodatkipodjetja> <referencnipodatkipodjetja> <vrstapodatkapodjetja>gn</vrstapodatkapodjetja> <podatekpodjetja>xxxx</podatekpodjetja> </referencnipodatkipodjetja> </podatkipodjetja> <podatkipodjetja> <nazivnaslovpodjetja> <vrstapartnerja>iv</vrstapartnerja> <identifikacijapartnerja> <stevilkapartnerja>0549</stevilkapartnerja> <agencija>91</agencija> </identifikacijapartnerja> <nazivpartnerja> <nazivpartnerja1>xxxx</nazivpartnerja1> <nazivpartnerja2>xxxx</nazivpartnerja2> <nazivpartnerja3 /> <nazivpartnerja4 /> </nazivpartnerja> <ulica> <ulica1>xxxx</ulica1> <ulica2 /> <ulica3 /> <ulica4 /> </ulica> <kraj>xxxx</kraj> <nazivdrzave>slovenija</nazivdrzave> <postnastevilka>8000</postnastevilka> <kodadrzave>si</kodadrzave> </nazivnaslovpodjetja> <financnipodatkipodjetja> <tipinstitucije>rb</tipinstitucije> <bancniracun> <stevilkabancnegaracuna>xxxxx</stevilkabancnegaracuna> <nazivbanke1 /> <nazivbanke2 /> </bancniracun> <kodadrzavebanke>si</kodadrzavebanke> </financnipodatkipodjetja> <referencnipodatkipodjetja> <vrstapodatkapodjetja>va</vrstapodatkapodjetja> <podatekpodjetja>xxxxx</podatekpodjetja> </referencnipodatkipodjetja> <referencnipodatkipodjetja> <vrstapodatkapodjetja>gn</vrstapodatkapodjetja> <podatekpodjetja>5198984000</podatekpodjetja> </referencnipodatkipodjetja> <kontaktipodjetja> <komunikacije> <stevilkakomunikacije>xxxxxx</stevilkakomunikacije> <vrstakomunikacije>te</vrstakomunikacije> </komunikacije> <komunikacije> <stevilkakomunikacije /> <vrstakomunikacije>fx</vrstakomunikacije> </komunikacije> <komunikacije> <stevilkakomunikacije /> <vrstakomunikacije>em</vrstakomunikacije> </komunikacije> </kontaktipodjetja> </podatkipodjetja> <postavkeracuna> <postavka> <stevilkavrstice>1</stevilkavrstice> </postavka> <dodatnaidentifikacijaartikla> <vrstapodatkaartikla>5</vrstapodatkaartikla> <stevilkaartikladodatna>0000</stevilkaartikladodatna> <vrstakodeartikladodatna>sa</vrstakodeartikladodatna> </dodatnaidentifikacijaartikla> <opisiartiklov> <kodaopisaartikla>f</kodaopisaartikla> <opisartikla> <vrstaartikla>ser</vrstaartikla> <opisartikla1>tisk blokcev "Šmarjeta" zelen, 100-</opisartikla1> </opisartikla> </opisiartiklov> <kolicinaartikla> <vrstakolicine>47</vrstakolicine> <kolicina>2</kolicina> <enotamere>pce</enotamere> </kolicinaartikla> <zneskipostavke> <vrstazneskapostavke>38</vrstazneskapostavke> <znesekpostavke>34.16</znesekpostavke> </zneskipostavke> <zneskipostavke> <vrstazneskapostavke>66</vrstazneskapostavke> <znesekpostavke>28</znesekpostavke> </zneskipostavke> <zneskipostavke> <vrstazneskapostavke>203</vrstazneskapostavke> <znesekpostavke>28</znesekpostavke> </zneskipostavke> <cenapostavke> <vrstacene>aaa</vrstacene> <cena>14</cena> </cenapostavke> <cenapostavke> <vrstacene>aab</vrstacene> <cena>14</cena> </cenapostavke> <referencnidokumentipostavke> <vrstadokumentapostavke>on</vrstadokumentapostavke> <stevilkadokumentapostavke /> </referencnidokumentipostavke> <referencnidokumentipostavke> <vrstadokumentapostavke>aak</vrstadokumentapostavke> <stevilkadokumentapostavke>268,269/d:1</stevilkadokumentapostavke> </referencnidokumentipostavke> <referencnidokumentipostavke> <vrstadokumentapostavke>aab</vrstadokumentapostavke> <stevilkadokumentapostavke /> </referencnidokumentipostavke> <davkipostavke> <davkinapostavki> <vrstadavkapostavke>vat</vrstadavkapostavke> <odstotekdavkapostavke>22</odstotekdavkapostavke> </davkinapostavki> <zneskidavkovpostavke> <vrstazneskadavkapostavke>124</vrstazneskadavkapostavke> <znesek>6.16</znesek> </zneskidavkovpostavke> <zneskidavkovpostavke> <vrstazneskadavkapostavke>125</vrstazneskadavkapostavke> <znesek>28</znesek> </zneskidavkovpostavke> </davkipostavke> <odstotkipostavk> <identifikator>a</identifikator> <vrstaodstotkapostavke>1</vrstaodstotkapostavke> <odstotekpostavke>0</odstotekpostavke> <vrstazneskaodstotka>204</vrstazneskaodstotka> <znesekodstotka>0</znesekodstotka> </odstotkipostavk> </postavkeracuna> <postavkeracuna> <postavka> <stevilkavrstice>2</stevilkavrstice> </postavka> <dodatnaidentifikacijaartikla> <vrstapodatkaartikla>5</vrstapodatkaartikla> <stevilkaartikladodatna>0000</stevilkaartikladodatna> <vrstakodeartikladodatna>sa</vrstakodeartikladodatna> </dodatnaidentifikacijaartikla> <opisiartiklov> <kodaopisaartikla>f</kodaopisaartikla> <opisartikla> <vrstaartikla>ser</vrstaartikla> <opisartikla1>samolepilne etikete (različne)</opisartikla1> </opisartikla> </opisiartiklov> <kolicinaartikla> <vrstakolicine>47</vrstakolicine> <kolicina>2600</kolicina> <enotamere>pce</enotamere> </kolicinaartikla> <zneskipostavke> <vrstazneskapostavke>38</vrstazneskapostavke> <znesekpostavke>168.12</znesekpostavke> </zneskipostavke> <zneskipostavke> <vrstazneskapostavke>66</vrstazneskapostavke> <znesekpostavke>137.8</znesekpostavke> </zneskipostavke> <zneskipostavke> <vrstazneskapostavke>203</vrstazneskapostavke> <znesekpostavke>137.8</znesekpostavke> </zneskipostavke> <cenapostavke> <vrstacene>aaa</vrstacene> <cena>0.053</cena> </cenapostavke> <cenapostavke> <vrstacene>aab</vrstacene> <cena>0.053</cena> </cenapostavke> <referencnidokumentipostavke> <vrstadokumentapostavke>on</vrstadokumentapostavke> <stevilkadokumentapostavke /> </referencnidokumentipostavke> <referencnidokumentipostavke> <vrstadokumentapostavke>aak</vrstadokumentapostavke> <stevilkadokumentapostavke>268,269/d:2</stevilkadokumentapostavke> </referencnidokumentipostavke> <referencnidokumentipostavke> <vrstadokumentapostavke>aab</vrstadokumentapostavke> <stevilkadokumentapostavke /> </referencnidokumentipostavke> <davkipostavke> <davkinapostavki> <vrstadavkapostavke>vat</vrstadavkapostavke> <odstotekdavkapostavke>22</odstotekdavkapostavke> </davkinapostavki> <zneskidavkovpostavke> <vrstazneskadavkapostavke>124</vrstazneskadavkapostavke> <znesek>30.32</znesek> </zneskidavkovpostavke> <zneskidavkovpostavke> <vrstazneskadavkapostavke>125</vrstazneskadavkapostavke> <znesek>137.8</znesek> </zneskidavkovpostavke> </davkipostavke> <odstotkipostavk> <identifikator>a</identifikator> <vrstaodstotkapostavke>1</vrstaodstotkapostavke> <odstotekpostavke>0</odstotekpostavke> <vrstazneskaodstotka>204</vrstazneskaodstotka> <znesekodstotka>0</znesekodstotka> </odstotkipostavk> </postavkeracuna> <povzetekdavkovracuna> <davkiracuna> <vrstadavka>vat</vrstadavka> <odstotekdavka>22</odstotekdavka> </davkiracuna> <zneskidavkov> <vrstazneskadavka>125</vrstazneskadavka> <znesekdavka>165.8</znesekdavka> </zneskidavkov> <zneskidavkov> <vrstazneskadavka>124</vrstazneskadavka> <znesekdavka>36.48</znesekdavka> </zneskidavkov> </povzetekdavkovracuna> <povzetekzneskovracuna> <zneskiracuna> <vrstazneska>9</vrstazneska> <znesekracuna>202.28</znesekracuna> </zneskiracuna> <skliczaplacilo> <sklicplacila>pq</sklicplacila> <stevilkasklica>si010050409-0042016-13</stevilkasklica> </skliczaplacilo> </povzetekzneskovracuna> </racun> <ds:signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> <ds:signedinfo> <ds:canonicalizationmethod algorithm="http://www.w3.org/tr/2001/rec-xml-c14n-20010315" /> <ds:signaturemethod algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /> <ds:reference uri=""> <ds:transforms> <ds:transform algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /> <ds:transform algorithm="http://www.w3.org/tr/2001/rec-xml-c14n-20010315" /> </ds:transforms> <ds:digestmethod algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> <ds:digestvalue>nuggbc3o7pd86rn9rxaxitxqhvs=</ds:digestvalue> </ds:reference> </ds:signedinfo> <ds:signaturevalue>xkgtc</ds:signaturevalue> <ds:keyinfo> <ds:x509data> <ds:x509certificate>mii</ds:x509certificate> </ds:x509data> </ds:keyinfo> </ds:signature> </izdaniracunenostavni>
i can read first postavkeracuna/postavka/stevilkavrstice
node. don't how read second node. have tried examples google, nothing has worked. don't know how read values in nodes have same name.
i'm use code:
form155.xmldocument1.loadfromfile(edit1.text); doc := form155.xmldocument1; x := 0 doc.childnodes.nodes['izdaniracunenostavni'].childnodes.count - 1 begin racunchilds := doc.childnodes.nodes['izdaniracunenostavni'].childnodes[x]; if racunchilds.nodename = 'racun' begin form2.racuni_izdani1.append; form2.racuni_izdani1zap_stevilka.value := zaporedna_stevilka + 1; glavaracuna_node := racunchilds.childnodes.nodes['glavaracuna']; form2.racuni_izdani1st_racuna.value := glavaracuna_node.childnodes.nodes['stevilkaracuna'].nodevalue; datumiracuna_node := racunchilds.childnodes.nodes['datumiracuna']; datums := datumiracuna_node.childnodes.nodes['datumracuna'].nodevalue; letos := copy(datums,1,4); mesecs := copy(datums,6,2); dans := copy(datums,9,2); datumskupaj := dans + '.'+ mesecs + '.' + letos; form2.racuni_izdani1datum_racuna.value := strtodate(datumskupaj); placilnipogoji_node := racunchilds.childnodes.nodes['placilnipogoji']; placilniroki_node := placilnipogoji_node.childnodes.nodes['placilniroki']; datums := placilniroki_node.childnodes.nodes['datum'].nodevalue; letos := copy(datums,1,4); mesecs := copy(datums,6,2); dans := copy(datums,9,2); datumskupaj := dans + '.'+ mesecs + '.' + letos; form2.racuni_izdani1datum_valute.value := strtodate(datumskupaj); referencnidokumenti_node := racunchilds.childnodes.nodes[11]; form2.racuni_izdani1st_dobavnice.value := referencnidokumenti_node.childnodes.nodes['stevilkadokumenta'].nodevalue; datums := referencnidokumenti_node.childnodes.nodes['datumdokumenta'].nodevalue; letos := copy(datums,1,4); mesecs := copy(datums,6,2); dans := copy(datums,9,2); datumskupaj := dans + '.'+ mesecs + '.' + letos; form2.racuni_izdani1datum_dobavnice.value := strtodate(datumskupaj); podatkipodjetja_node := racunchilds.childnodes.nodes[14]; nazivnaslovpodjetja_node := podatkipodjetja_node.childnodes.nodes['nazivnaslovpodjetja']; nazivpartnerja_node := nazivnaslovpodjetja_node.childnodes.nodes['nazivpartnerja']; form2.racuni_izdani1naziv_partnerja.value := nazivpartnerja_node.childnodes.nodes['nazivpartnerja1'].nodevalue; povzetekdavkovracuna_node := racunchilds.childnodes.nodes['povzetekdavkovracuna']; zneskidavkov_node := povzetekdavkovracuna_node.childnodes.nodes['zneskidavkov']; form2.racuni_izdani1skupaj_brez_ddv.value := zneskidavkov_node.childnodes.nodes['znesekdavka'].nodevalue; povzetekdavkovracuna_node := racunchilds.childnodes.nodes['povzetekdavkovracuna']; zneskidavkov_node := povzetekdavkovracuna_node.childnodes.nodes[2]; form2.racuni_izdani1znesek_ddv.value := zneskidavkov_node.childnodes.nodes['znesekdavka'].nodevalue; povzetekzneskovracuna_node := racunchilds.childnodes.nodes['povzetekzneskovracuna']; zneskiracuna_node := povzetekzneskovracuna_node.childnodes.nodes['zneskiracuna']; form2.racuni_izdani1skupaj_z_ddv.value := zneskiracuna_node.childnodes.nodes['znesekracuna'].nodevalue; end; end;
when dealing sibling nodes of same name, childnodes.nodes[]
property find first matching node. ixmlnode
not have functionality find next sibling of same name. have loop through parent node's children manually, looking @ each node's name, eg:
form155.xmldocument1.loadfromfile(edit1.text); doc := form155.xmldocument1; racunchilds := doc.childnodes['izdaniracunenostavni'].childnodes['racun']; ... := 0 racunchilds.childnodes.count-1 begin child := racunchilds.childnodes[i]; if child.localname = 'postavkeracuna' begin // use child.childnodes['postavka'].childnodes['stevilkavrstice'] needed... end; end;
alternatively:
function findsamenamesibling(node: ixmlnode): ixmlnode; var i: integer; nodes: ixmlnodelist; sibling: ixmlnode; begin result := nil; if node = nil exit; nodes := node.parentnode.childnodes; := nodes.indexof(node)+1 nodes.count-1 begin sibling := nodes[i]; if (sibling.namespaceuri = node.namespaceuri) , (sibling.localname = node.localname) begin result := sibling; exit; end; end; end; ... form155.xmldocument1.loadfromfile(edit1.text); doc := form155.xmldocument1; racunchilds := doc.childnodes['izdaniracunenostavni'].childnodes['racun']; ... child := racunchilds.childnodes['postavkeracuna']; while child <> nil begin // use child.childnodes['postavka'].childnodes['stevilkavrstice'] needed... child := findsamenamesibling(child); end;
alternatively, use xpath query instead, if underlying xml dom engine supports xpath, eg:
uses ..., xml.xmldom; var query: idomnodeselect; nodes: idomnodelist; ... form155.xmldocument1.loadfromfile(edit1.text); doc := form155.xmldocument1; racunchilds := doc.childnodes['izdaniracunenostavni'].childnodes['racun']; ... if supports(racunchilds.domnode, idomnodeselect, query) begin nodes := query.selectnodes('postavkeracuna/postavka/stevilkavrstice'); if nodes <> nil begin := 0 nodes.length-1 begin // use nodes[i] needed... end; end; end else begin // code further above ... end;
Comments
Post a Comment