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.
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. –
Danke, dass Sie sich das angeschaut haben. Ich habe es gelöst. – Nag