2017-01-09 1 views
0

Ich habe die Anforderung, dass eine große XML-Datei in mehrere Dateien aufgeteilt werden muss, basierend auf Datensatzzähler Ich setze Konstante wie 100 oder 1000 mit XSLT-Transformation.Geteilte XML-Datei mit XSLT 1.0 basierend auf der Anzahl der Knoten als Zähler

bestimmte Knotenwerte sind nur einmal für die gesamte Datei verfügbar. Diese sollten Kopien sein, wie sie in jeder Datei vorhanden sind. Wie Header-Informationen oder purchaseOrder Nummer

Ich muss xslt 1.0 Version verwenden, gibt es nicht 2.0 unterstützende Parser in meinem Middleware-System. Beispieldatei sieht so aus.

<?xml version="1.0" encoding="UTF-8"?> 
 
<ns0:HeaderOffile xmlns:ns0="http://cdpa.com/xix/ALS"> 
 
\t <EPBody> 
 
\t \t <EList> 
 
\t \t \t <AgEvent> 
 
\t \t \t \t <parentId>77777</parentId> 
 
\t \t \t \t <childId> 
 
\t \t \t \t \t <epic>400</epic> 
 
\t \t \t \t \t <epic>401</epic> 
 
\t \t \t \t </childId> 
 
\t \t \t \t <extensions> 
 
\t \t \t \t \t <SExtension> 
 
\t \t \t \t \t \t <epic>400</epic> 
 
\t \t \t \t \t \t <NameValue> 
 
\t \t \t \t \t \t \t <PName>SERVICE</PName> 
 
\t \t \t \t \t \t \t <PValue>03</PValue> 
 
\t \t \t \t \t \t </NameValue> 
 
\t \t \t \t \t </SExtension> 
 
\t \t \t \t \t <OneTimeForFile> 
 
\t \t \t \t \t \t <NameValue> 
 
\t \t \t \t \t \t \t <PName>ZFIELD1</PName> 
 
\t \t \t \t \t \t \t <PValue>ROYAL</PValue> 
 
\t \t \t \t \t \t </NameValue> 
 
\t \t \t \t \t \t <NameValue> 
 
\t \t \t \t \t \t \t <ParameterName>ZFIELD2</ParameterName> 
 
\t \t \t \t \t \t \t <PValue>GOLD</PValue> 
 
\t \t \t \t \t \t </NameValue> 
 
\t \t \t \t \t </OneTimeForFile> 
 
\t \t \t \t </extensions> 
 
\t \t \t </AgEvent> 
 
\t \t \t <AgEvent> 
 
\t \t \t \t <parentId>88888</parentId> 
 
\t \t \t \t <childId> 
 
\t \t \t \t \t <epic>300</epic> 
 
\t \t \t \t \t <epic>301</epic> 
 
\t \t \t \t </childId> 
 
\t \t \t \t <extensions> 
 
\t \t \t \t \t <SExtension> 
 
\t \t \t \t \t \t <epic>300</epic> 
 
\t \t \t \t \t \t <NameValue> 
 
\t \t \t \t \t \t \t <PName>SERVICE</PName> 
 
\t \t \t \t \t \t \t <PValue>03</PValue> 
 
\t \t \t \t \t \t </NameValue> 
 
\t \t \t \t \t </SExtension> 
 
\t \t \t \t </extensions> 
 
\t \t \t </AgEvent> 
 
\t \t \t <AgEvent> 
 
\t \t \t \t <parentId>99999</parentId> 
 
\t \t \t \t <childId> 
 
\t \t \t \t \t <epic>200</epic> 
 
\t \t \t \t \t <epic>201</epic> 
 
\t \t \t \t </childId> 
 
\t \t \t \t <extensions> 
 
\t \t \t \t \t <SExtension> 
 
\t \t \t \t \t \t <epic>200</epic> 
 
\t \t \t \t \t \t <NameValue> 
 
\t \t \t \t \t \t \t <PName>SERVICE</PName> 
 
\t \t \t \t \t \t \t <PValue>03</PValue> 
 
\t \t \t \t \t \t </NameValue> 
 
\t \t \t \t \t </SExtension> 
 
\t \t \t \t </extensions> 
 
\t \t \t </AgEvent> 
 
\t \t </EList> 
 
\t </EPBody> 
 
</ns0:HeaderOffile>

In obigen Datei muss ich die Datei auf AGEvent Knoten eines Zählwerts aufzuspalten I eingestellt, beispielsweise für jeweils 100 AGEvent Knoten. Wenn ich in einer Datei 560 AGEvent-Knoten habe, dann gibt es 6 Dateien, jeweils 100 in 5 Dateien und die letzte 6. Datei würde 60 AGEvent-Knoten haben.

Der OneTimeForFile-Knoten ist nur einmal in der Eingabedatei vorhanden, daher sollte er einmal pro Datei im ersten AGEvent-Knoten kopiert werden.

Bitte helfen Sie mir ein komplettes XSLT Skript zu schreiben und lassen Sie mich irgendwelche Fragen wissen. Ich suchte im Internet nach einer Lösung für mein Problem.

Ich versuchte mit einem post here! aber nicht erreicht. Ihre wertvolle Zeit sehr geschätzt. Vielen Dank im Voraus.

+0

XSLT 1.0 bietet keine Möglichkeit, die Eingabe in mehrere Ausgabedateien aufzuteilen. Wenn Ihr Prozessor dies unterstützt, können Sie die EXSLT-Anweisung 'exsl: document' verwenden. andernfalls müssen Sie Ihrer aufrufenden Anwendung mitteilen, dass sie mehrere Transformationen durchführen soll, wobei jedes Mal ein Parameter um 100 erhöht wird. Und Sie müssten eine Möglichkeit finden, die Gesamtanzahl von AGEvent-Knoten an die aufrufende Anwendung zu übergeben. - PS Ich sehe keinerlei Verbindung zu der Frage, die Sie verlinkt haben. –

+0

Danke, dass Sie sich das angeschaut haben. Ich habe es gelöst. – Nag

Antwort

0

Es gibt nur zwei Möglichkeiten, um eine Datei in mehrere Dateien aufgeteilt mit Hilfe von XSLT 1.0:

  1. Verwenden Erweiterungen des Herstellers. Dazu müssen wir wissen, welchen XSLT-Prozessor Sie verwenden.
  2. Verwenden Sie mehrere Transformationen, eine pro Ausgabedatei, die in der Regel einen Parameter an das Stylesheet liefert, um anzugeben, welche der Partitionen bei jedem einzelnen Lauf generiert werden soll. Dazu müssen wir mehr darüber wissen, wie Sie die Transformationen aufrufen.
+0

Danke für den Blick darauf. Ich benutze XSLT. Ich habe mich selbst gelöst, was ich wollte. – Nag

+1

Wenn Sie ein Problem lösen, das Sie angesprochen haben, geben Sie bitte Ihre Antwort als Antwort auf die Frage an, um zukünftigen Besuchern der Site eine Höflichkeit zu gewähren. –

Verwandte Themen