我有这个XML。我知道如何阅读“EDI_DC40”并获取值。
<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 :(得分:4)
由于您在关于本文档的上一个问题中提到了TXMLDocument的用法,因此示例实现可能如下所示:
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;
答案 1 :(得分:2)
您只需读取节点#1,然后读取节点#2,然后读取节点#3,等等。如果它们具有相同的名称 - 无关紧要。只是一个接一个地读它们。
你可以像这样枚举它们:superobject.googlecode.com/git/readme.html使用XML loader superobject.googlecode.com/git
或者您可以使用任何其他XML解析器。
等等
你也可以尝试一些EDI目标库,比如http://edisdk.sourceforge.net/index.htm,后来被合并到Jedi代码库中(但可能会被放弃并在以后删除)