Ich habe eine XSLT-Datei, um große Datenmengen zu transformieren. Ich möchte eine "Split" -Funktion hinzufügen, entweder als verkettete XSLT oder innerhalb der aktuellen XSLT, die mehrere Ausgabedateien erstellen kann, um die Größe der Dateien unter einem bestimmten Schwellenwert zu begrenzen. Nehmen wir an, dass die Eingabe von XML als unten:XSLT geteilte Ausgabedateien - Muenchsche Gruppierung
<People>
<Person>
<name>John</name>
<date>June12</date>
<workTime taskID="1">34</workTime>
<workTime taskID="2">12</workTime>
</Person>
<Person>
<name>John</name>
<date>June13</date>
<workTime taskID="1">21</workTime>
<workTime taskID="2">11</workTime>
</Person>
<Person>
<name>Jack</name>
<date>June19</date>
<workTime taskID="1">20</workTime>
<workTime taskID="2">30</workTime>
</Person>
</People>
Die XSLT-Datei ist als Muench-Gruppierung unten.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="PersonTasks" match="workTime" use="concat(@taskID, ../name)"/>
<xsl:template match="/">
<People>
<xsl:apply-templates select="//workTime[generate-id() = generate-id(key('PersonTasks',concat(@taskID, ../name))[1])]"/>
</People>
</xsl:template>
<xsl:template match="workTime">
<xsl:variable name="taskID">
<xsl:value-of select="@taskID"/>
</xsl:variable>
<xsl:variable name="name">
<xsl:value-of select="../name"/>
</xsl:variable>
<Person>
<name>
<xsl:value-of select="$name"/>
</name>
<taskID>
<xsl:value-of select="$taskID"/>
</taskID>
<xsl:for-each select="//workTime[../name = $name][@taskID = $taskID]">
<workTime>
<date>
<xsl:value-of select="../date"/>
</date>
<time>
<xsl:value-of select="."/>
</time>
</workTime>
</xsl:for-each>
</Person>
</xsl:template>
</xsl:stylesheet>
Allerdings möchte ich, als eine Ausgabe, mehrere Dateien wie unten statt einer großen. Für dieses Beispiel habe ich nur einen Namen pro Datei angegeben..aber das sollte ein Parameter sein.
Ausgabedatei für die erste Person:
<People>
<Person>
<name>John</name>
<taskID>1</taskID>
<workTime>
<date>June12</date>
<time>34</time>
</workTime>
<workTime>
<date>June13</date>
<time>21</time>
</workTime>
</Person>
<Person>
<name>John</name>
<taskID>2</taskID>
<workTime>
<date>June12</date>
<time>12</time>
</workTime>
<workTime>
<date>June13</date>
<time>11</time>
</workTime>
</Person>
</People>
Ausgabedatei für die zweite Person:
<People>
<Person>
<name>Jack</name>
<taskID>1</taskID>
<workTime>
<date>June19</date>
<time>20</time>
</workTime>
</Person>
<Person>
<name>Jack</name>
<taskID>2</taskID>
<workTime>
<date>June19</date>
<time>30</time>
</workTime>
</Person>
</People>
Was wäre der bevorzugte und eleganteste Ansatz mit Hilfe von XSLT 1.0? Gibt es eine Möglichkeit, eine verkettete XSLT innerhalb der XSLT aufzurufen, um die Ausgabedateien zu teilen?
Prost.
Gute Frage, +1. Sehen Sie meine Antwort für eine Reihe von Möglichkeiten, dies zu tun. –