Hallo,
Ich habe es geschafft mit einiger Hilfe eine xml - Datei einzulesen.
Ich benutzt FB SDIXML_XML_TO_DOM und SDIXML_DOM_TO_DATA.
Bis zum Aufruf des 2.FB SDIXML_DOM_TO_DATA werden alle Daten richtig gefüllt.
Die Augabetabelle ls_export dann aber leer.
Kann mir jemand helfen.
XML-DAtei
<?xml version="1.0" encoding="utf-8" ?>
- <lieferscheine>
- <datei>
<dateiNr>151023</dateiNr>
<erstellungsdatum>2009-03-03T08:11:27+01:00</erstellungsdatum>
</datei>
- <lieferschein>
- <lieferung>
<typ>gutschrift</typ>
<lieferdatum>2009-03-03</lieferdatum>
<nr>682E185</nr>
<drop>0</drop>
<kdAuftragsNr>684Y115</kdAuftragsNr>
<bezugsNr>682E135</bezugsNr>
<waehrung>EUR</waehrung>
<warenwert>-000081.30</warenwert>
<pfand>+000000.00</pfand>
- <aufteilungMwst>
- <betragMwst>
<mwst>A</mwst>
<betrag>-000008.13</betrag>
</betragMwst>
- <betragMwst>
<mwst>B</mwst>
<betrag>+000000.00</betrag>
</betragMwst>
- <betragMwst>
<mwst>C</mwst>
<betrag>+000000.00</betrag>
</betragMwst>
</aufteilungMwst>
</lieferung>
- <absender>
<firmierung>C&N</firmierung>
<niederlassungsNr>30</niederlassungsNr>
<niederlassung>Hermann Gebauer Strasse 18, 1220 Wien</niederlassung>
- <bearbeiter>
<name>Fr. Osimic</name>
<telefon>01/732 13</telefon>
</bearbeiter>
</absender>
- <empfaenger>
<storenr>7206</storenr>
</empfaenger>
- <lieferposten>
- <posten>
<artNrKreditor>7452</artNrKreditor>
<artNrDebitor />
<artbezeichnung />
<eannummer />
<handelsbezeichnung />
<latein />
<produktionsmethode>gefangen im</produktionsmethode>
<herkunft>Nordostatlantik</herkunft>
<auftragsmenge>-00001.00</auftragsmenge>
<auftragseinheit>VE</auftragseinheit>
<rechnungsmenge>-00010.000</rechnungsmenge>
<rechnungseinheit>KG</rechnungseinheit>
<preis>+000008.13</preis>
<mwst>A</mwst>
<betrag>-000081.30</betrag>
<grundpreisProRe>+000008.13</grundpreisProRe>
</posten>
- <posten>
<artNrKreditor>7451</artNrKreditor>
<artNrDebitor />
<artbezeichnung />
<eannummer />
<handelsbezeichnung />
<latein />
<produktionsmethode>gefangen im</produktionsmethode>
<herkunft>Nordostatlantik</herkunft>
<auftragsmenge>-00002.00</auftragsmenge>
<auftragseinheit>VE</auftragseinheit>
<rechnungsmenge>-00020.000</rechnungsmenge>
<rechnungseinheit>KG</rechnungseinheit>
<preis>+000008.13</preis>
<mwst>A</mwst>
<betrag>-000162.60</betrag>
<grundpreisProRe>+000008.13</grundpreisProRe>
</posten>
</lieferposten>
<pfandberechnung />
</lieferschein>
</lieferscheine>
Quelltext - ABAP:
TYPES: begin of ltys_export,
kostl type kostl,
name type name1,
end of ltys_export.
TYPES: ltyt_export type standard table of ltys_export.
DATA: lt_export type ltyt_export.
DATA: ls_export type ltys_export.
data: gt_xml type dcxmllines. " PT_XML
data: lr_doc type ref to if_ixml_document
, lr_top_element type ref to if_ixml_element
, lr_element type ref to if_ixml_element
, lr_ixml_factory type ref to if_ixml
, lr_items type ref to if_ixml_node_collection
, lt_xml type dcxmllines
, lv_size type i
, lf_control type dcxmldescl
, lf_problems type dcxmlprbl
, lt_table type table of text100 with header line
, lv_ind type i
, lv_value(100).
data: pv_subrc type sy-subrc.
data: piXML type ref to if_ixml,
pDocument type ref to if_ixml_document,
pStreamFactory type ref to if_ixml_stream_factory,
pIStream type ref to if_ixml_istream,
pParser type ref to if_ixml_parser,
pNode type ref to if_ixml_node,
pText type ref to if_ixml_text,
string type string,
count type i,
index type i,
totalSize type i,
dsn(40) type C,
xstr type xstring.
*-- read the XML document from the frontend machine
types: begin of xml_line,
data(256) type X,
end of xml_line.
data: xml_table type table of xml_line.
data: filename type string.
filename = 'm:\sap\schnittstelle\tst\ns151023.xml'. "#EC NOTEXT
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = filename
FILETYPE = 'BIN' "#EC NOTEXT
IMPORTING
FILELENGTH = totalSize
TABLES
DATA_TAB = xml_table
EXCEPTIONS
OTHERS = 11.
if sy-subrc <> 0.
message w000.
exit.
endif.
.
ranges: lr_atinn for cabn-atinn.
*
* Wandle XML-Monitordefinition um in ein DOM ( Document Object Model )
*
call function 'SDIXML_XML_TO_DOM'
exporting
xml = xml_table[]
size = totalSize
importing
document = lr_doc
exceptions
invalid_input = 1
others = 99.
case sy-subrc.
when 0.
" ok
when 1.
" ungültiges XML-Format entdeckt
pv_subrc = 1.
exit.
when others.
pv_subrc = 1.
exit.
endcase.
lr_top_element = lr_doc->get_root_element( ).
lv_ind = 0.
lr_items = lr_doc->get_elements_by_tag_name( name = 'datei' ).
*
* Transformiere das DOM in die entsprechende ABAP-Struktur, welche
* für die Erzeugung der Definition in XML-Format verwendet wurde
while lv_ind < lr_items->get_length( ).
lr_element ?= lr_items->get_item( lv_ind ).
lv_value = lr_element->get_value( ).
lf_control-err_treat = 'X'.
lf_control-warn_treat = 'X'.
call function 'SDIXML_DOM_TO_DATA'
exporting
data_as_dom = lr_element
control = lf_control
importing
dataobject = ls_export
problems = lf_problems
exceptions
illegal_object = 1
others = 99.
append ls_export to lt_export.
break-point.
case sy-subrc.
when 0.
if lf_problems is not initial.
pv_subrc = 1.
exit.
endif.
when 1.
pv_subrc = 1.
exit.
when others.
pv_subrc = 1.
exit.
endcase.
add 1 to lv_ind.
endwhile.
Und wie bekomme ich denn verschachtelte XML Dateien hin.
Danke