2013-11-21 93 views
-3

我有這個XML。我知道如何閱讀「EDI_DC40」並獲取值。delphi閱讀xml與xmldocument

<ns0:ORDERS xmlns:ns0="http://Purchasing/GenericPartner"> 
    <EDI_DC40> 
    <TABNAM>EDI_DC40</TABNAM> 
    <MANDT>210</MANDT> 
    <DOCNUM>1498177</DOCNUM> 
    <DOCREL>700</DOCREL> 
    <STATUS>30</STATUS> 
    <DIRECT>1</DIRECT> 
    <OUTMOD>2</OUTMOD> 
    <EXPRSS></EXPRSS> 
    <TEST></TEST> 
    <IDOCTYP>ORDERS05</IDOCTYP> 
    <CIMTYP></CIMTYP> 
    <MESTYP>ORDERS</MESTYP> 
    <MESCOD></MESCOD> 
    <MESFCT>GEN</MESFCT> 
    <STD></STD> 
    <STDVRS></STDVRS> 
    <STDMES>ORDERS</STDMES> 
    <SNDPOR>SAPR3D</SNDPOR> 
    <SNDPRT>LS</SNDPRT> 
    <SNDPFC></SNDPFC> 
    <SNDPRN>R3DCLNT210</SNDPRN> 
    <SNDSAD></SNDSAD> 
    <SNDLAD></SNDLAD> 
    <RCVPOR>BT_EDIPURC</RCVPOR> 
    <RCVPRT>LI</RCVPRT> 
    <RCVPFC>BA</RCVPFC> 
    <RCVPRN>0002000007</RCVPRN> 
    <RCVSAD></RCVSAD> 
    <RCVLAD></RCVLAD> 
    <CREDAT>20101124</CREDAT> 
    <CRETIM>085946</CRETIM> 
    <REFINT></REFINT> 
    <REFGRP></REFGRP> 
    <REFMES></REFMES> 
    <ARCKEY></ARCKEY> 
    <SERIAL>20101116202544</SERIAL> 
    </EDI_DC40> 
    <E1EDK01> 
    <CURCY>EUR</CURCY> 
    <ZTERM>Z50D</ZTERM> 
    <BELNR>4600006935</BELNR> 
    </E1EDK01> 
    <E1EDK03> 
    <IDDAT>012</IDDAT> 
    <DATUM>20101116</DATUM> 
    </E1EDK03> 
    <E1EDKA1> 
    <PARVW>AG</PARVW> 
    <TELF1>11111</TELF1> 
    <TELFX>+111</TELFX> 
    <BNAME>mataz</BNAME> 
    </E1EDKA1> 
    <E1EDKA1> 
    <PARVW>WE</PARVW> 
    <LIFNR>1000</LIFNR> 
    <NAME1>skl</NAME1> 
    <NAME2></NAME2> 
    <STRAS>ulica skladišča 5</STRAS> 
    <STRS2></STRS2> 
    <ORT01>novo</ORT01> 
    <PSTLZ>1000</PSTLZ> 
    <LAND1>AU</LAND1> 
    </E1EDKA1> 
    <E1EDK17> 
    <QUALF>001</QUALF> 
    <LKOND>CIP</LKOND> 
    <LKTEXT>Novo</LKTEXT> 
    </E1EDK17> 
    <E2EDP01008GRP> 
    <E1EDP01> 
     <POSEX>00001</POSEX> 
     <MENGE>100.000</MENGE> 
     <MENEE>PCE</MENEE> 
     <VPREI>1.24</VPREI> 
     <PEINH>100</PEINH> 
     <NETWR>1.24</NETWR> 
    </E1EDP01> 
    <E1EDP20> 
     <WMENG>100.000</WMENG> 
     <EDATU>20101126</EDATU> 
    </E1EDP20> 
    <E1EDP19> 
     <QUALF>001</QUALF> 
     <IDTNR>000000000000201853</IDTNR> 
     <KTEXT>NA</KTEXT> 
    </E1EDP19> 
    </E2EDP01008GRP> 
    <E2EDP01008GRP> 
    <E1EDP01> 
     <POSEX>00001</POSEX> 
     <MENGE>1000.000</MENGE> 
     <MENEE>PCE</MENEE> 
     <VPREI>2.24</VPREI> 
     <PEINH>200</PEINH> 
     <NETWR>1.4</NETWR> 
    </E1EDP01> 
    <E1EDP20> 
     <WMENG>200.000</WMENG> 
     <EDATU>20101126</EDATU> 
    </E1EDP20> 
    <E1EDP19> 
     <QUALF>001</QUALF> 
     <IDTNR>000000000000201853</IDTNR> 
     <KTEXT>NA.CIPRINOL TBL A5 RU</KTEXT> 
    </E1EDP19> 
    </E2EDP01008GRP> 
    <E1EDS01> 
    <SUMID>002</SUMID> 
    <SUMME>1.24</SUMME> 
    </E1EDS01> 
</ns0:ORDERS> 

但我不知道如何讀「E2EDP01008GRP」和值裏面的「POSEX」,尤其是如果有同名的兩個節點。任何人都可以指向正確的方向或在代碼中顯示我嗎?

+0

您剛剛讀取節點#1,則讀取節點#2,然後讀取節點#3等。如果它們被命名或不是 - 無關緊要。你可以像這樣枚舉它們:https://superobject.googlecode.com/git/readme.html使用XML加載器後https://superobject.googlecode.com/git/ –

回答

2

您剛剛讀取節點#1,然後讀取節點#2,然後讀取節點#3等。如果它們具有相同的名稱或不是 - 無關緊要。只要一個接一個地閱讀它們。

你可以一一列舉如下:superobject.googlecode.com/git

使用XML裝載機後superobject.googlecode.com/git/readme.html或者你可以採取任何其他的XML解析器。

等等

你也可以嘗試一些EDI針對性的圖書館一樣http://edisdk.sourceforge.net/index.htm,後來合併成絕地武士代碼庫(但可以被放棄,後來刪除)

4

既然你在你的最後一個問題中提到IXMLDocument的使用regading這個文件,示例實現可能如下所示:

var 
    DOC:IXMLDocument; 
    i: Integer; 
    OrderChilds, E1EDP01_Node: IXMLNode; 
begin 
    DOC := LoadXMLDocument('c:\temp\orders.xml'); 
    // iterate your root node 'OREDERS' 
    for i := 0 to DOC.ChildNodes.Nodes['ORDERS'].ChildNodes.Count - 1 do 
    begin 
    OrderChilds := DOC.ChildNodes.Nodes['ORDERS'].ChildNodes[i]; 
    if OrderChilds.NodeName = 'E2EDP01008GRP' then // Your node(s) of interest 
    begin 
     E1EDP01_Node := OrderChilds.ChildNodes.Nodes['E1EDP01']; 
     if Assigned(E1EDP01_Node) then // did we find the node keeping the 'POSEX' node 
     Memo1.Lines.Add(E1EDP01_Node.ChildNodes.Nodes['POSEX'].NodeValue) 
    end; 
    end; 
end;