Neues Thema starten
Beantwortet

XMLFileSplitter - Index Out Of Bounds

Hallo,


ich habe ein Problem mit dem XMLFileSplitter, dieser wirft mir immer eine nichtssagende IndexOutOfBoundException, also ohne Angabe, wo dieser stattfindet.


Vorgehen:

Ich erstelle mithilfe des TextHTMLWriters eine XML Struktur aus einem Spreadsheet, diesen "String" wandle ich mithilfe des File2String in eine XML Datei um. Hier ein kleiner Ausschnitt der XML Datei:


<?xml version="1.0" encoding="UTF-8"?>

<Sale xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Exportdate="20170913T10:47:28" Exporttype="Sale" Branchno="XXX">

<Item>

<Itemno>123456</Itemno>

<Cost>19.95</Cost>

<Saleqty>1.00</Saleqty>

<Dateoftrans>20170904</Dateoftrans>

<Type>S</Type>

<Empno></Empno>

<Refno><![CDATA[]]></Refno>

<Branchno></Branchno>

<Customerid></Customerid>

</Item>

</Sale>


<Sale xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Exportdate="20170913T10:47:28" Exporttype="Sale" Branchno="XYXY">

<Item>

<Itemno>8910101</Itemno>

<Cost>19.95</Cost>

<Saleqty>1.00</Saleqty>

<Dateoftrans>20170904</Dateoftrans>

<Type>S</Type>

<Empno></Empno>

<Refno><![CDATA[]]></Refno>

<Branchno></Branchno>

<Customerid></Customerid>

</Item>

<Item>

<Itemno>98765</Itemno>

<Cost>24.95</Cost>

<Saleqty>1.00</Saleqty>

<Dateoftrans>20170904</Dateoftrans>

<Type>S</Type>

<Empno></Empno>

<Refno><![CDATA[]]></Refno>

<Branchno></Branchno>

<Customerid></Customerid>

</Item>

</Sale>


Wie man sehen kann ist das Sale-Tag hier mehrmals vorhanden kann auch mehrere Items enthalten. Das Sale Tag beinhaltet Attribute, die je nach Zeile aus dem Spreadsheet variieren können, als festen Header kann ich dies also nicht angeben.

Das Problem ist nun, dass pro Sale Tag eine neue XML-Datei erstellt werden muss.

Ich habe bereits versucht jeden Sale Tag einfach mit einem künstlich erstellten <Test> Tag zu umschließen, um dann an dem Test-Tag zu splitten, leider ohne großen Erfolg (weiterhin IndexOutOfBounds).


Wie splitte ich die XML nun entsprechend ?




Beste Antwort

Mal anders gefragt:

Kannst du evtl. den TextHTMLWriterMultiOutput nehmen und damit gleich mehrere XML-Dateien direkt erzeugen? Damit hast du alles komplett in der Hand und sparst dir das Splitten.

Siehe hier unter Mehrere XML Dateien erstellen.




Das Problem sind vemutlich die leeren CDATA Tags. Kannst du mal versuchen am XMLFileSplitter die Option "removeInvalidXMLContent" zu aktivieren.

Oder erzeuge am besten gar keine leeren CADAT Tags, falls du das in der Hand hast. 


Falls das klappt, dann prüfen wir noch mal, warum die Fehlermeldung das noch nicht sagt. Eigentlich hatten wir da etwas eingebaut, so dass die Fehlermeldung bei IndexOutOfBoundException auf die leeren CDATA hinweisen sollte. 

Das hat mich schonmal eine Fehlermeldung weitergebracht ;)

Die Fehlermeldung aktuell ist:

Error during preview of step: XMLFileSplitter [XMLFileSplitter, step position 9] (Error Message: XMLStreamException: ParseError at [row,col]:[1,393] Message: The markup in the document following the root element must be well-formed.)


Allerdings hat die XML kein Root- Element, da ja für jede neu erstellte Datei das Sale-Tag das root Element darstellen soll. Ich nehme an, wenn ich ein Root Element einfüge, so wird es auch in den neu erstellten Dateien eingetragen wird? -Das sollte nicht sein.

Ok ich konnte den fehler umgehen, indem ich einfach ein Root-Element hinzufüge. 
Allerdings ist es auch notwendig die Sale Tags mit einem künstlichen "Test-Tag" zu umschließen, an dem man dann splitten kann. Leider befindet sich dieser Test Tag dann auch in der XML, was nicht gewünscht ist. Auch die erste erstellte XML Datei enthält immer nur <?xml version="1.0" encoding="UTF-8"?>

Antwort

Mal anders gefragt:

Kannst du evtl. den TextHTMLWriterMultiOutput nehmen und damit gleich mehrere XML-Dateien direkt erzeugen? Damit hast du alles komplett in der Hand und sparst dir das Splitten.

Siehe hier unter Mehrere XML Dateien erstellen.



Super das hat mir sehr geholfen. Damit geht es jetzt.

Anmelden um einen Kommentar zu veröffentlichen