Ich bin sehr neu in XSL und XML und habe, hoffe ich, eine einfache Frage. Ich habe eine XML-Datei, die zwei Arrays von Zahlen enthält, die ich summieren muss. Hier ist ein Teil der XML-Datei
%Vor%Was ich wirklich will, ist die Summe der Elemente der beiden Intensity-Arrays, die addiert werden. So wäre es etwa so:
FirstArray [0] + SecondArray [0] = sum [0] was wirklich
ist105.84667205810547 + 1.0229243040084839 = 106.8696 und
ErstesArray [1] + ZweitesArray [1] = Summe [1]
105.83854675292969+ 48.868541717529297 = 154.7071 und so weiter ...
Es gibt ein paar andere Dinge zwischen diesen beiden, die ich jetzt ignorieren muss.
Danke!
Macht das Folgende, was Sie brauchen?
%Vor%Ich habe die folgende Ausgabe erhalten, als ich es mit Ihren Beispieldaten ausgeführt habe:
%Vor%Aktualisiert :
Sehen Sie sich sum
function an, z. B.:
Diese Vorlage summiert Intensity
-Elemente für beide IntensityArray
.
Ausgabe:
%Vor% Diese Transformation erzeugt das gewünschte Ergebnis, selbst wenn die beiden Knoten-Sets eine unterschiedliche Anzahl von Knoten haben und / oder einige der Knoten im zweiten Knoten-Satz keinen Wert haben, der auf eine Zahl
Wenn diese Umwandlung auf das folgende XML-Dokument angewendet wird (das gleiche wie das angegebene XML-Dokument, aber zum ersten Knoten hinzugefügt), setzen Sie ein weiteres Intensity
-Element (das letzte) die zwei Knoten-Sets unterscheiden sich in der Größe):
das gewünschte, korrekte Ergebnis wird erzeugt :
%Vor%Erläuterung :
Es sind zwei Variablen definiert, die jeweils die Knoten enthalten, die ein "Array" enthalten.
Zwei weitere Variablen sind definiert: $vShorterArr
, enthält die kürzere Knotenmenge und $vLongerArr
enthält die längere Knotenmenge.
Vorlagen werden auf den Knoten longer angewendet.
Jeder Knoten in der längeren Knotenmenge wird mit dem entsprechenden (falls vorhanden) Knoten in der kürzeren Knotenmenge oder sonst mit 0 summiert.
II. XSLT 2.0 Lösung :
%Vor%III. Verwenden von FXSL :
Es ist viel einfacher, dieses Problem mit der f:zip-with()
Funktion / Vorlage von FXSL .
Unten finden Sie eine Lösung, die FXSL 2 verwendet:
%Vor%