/ / wie konvertiert man xslt Version 2.0 auf Version 1.0 - xslt, xpath, xslt-1.0, xslt-2.0

Wie konvertiert man xslt Version 2.0 zu Version 1.0 - xslt, xpath, xslt-1.0, xslt-2.0

Ich verwende Xslt-Dokument, das Xpath-Version verwendet2 Funktionen. Ich habe nur xalan 2.6 jar, der xslt 1.0-Prozessor hat. Es ist eine Einschränkung, die ich nicht ändern kann

<xsl:variable name="var1_ClinicalDocument" as="node()?" select="ns0:ClinicalDocument"/>
<DSMessage>
<DSPatient>
<xsl:for-each

select="$var1_ClinicalDocument[fn:exists(ns0:id/@root)]">
<Source>
<xsl:sequence select="fn:string(ns0:id/@root)"/>
</Source>
</xsl:for-each>
<Demographics>
<xsl:for-each select="($var1_ClinicalDocument/ns0:recordTarget/ns0:patientRole/ns0:id)[fn:exists(@extension)]">
<externalID>
<xsl:sequence select="fn:string(@extension)"/>
</externalID>
</xsl:for-each>
<xsl:for-each select="($var1_ClinicalDocument/ns0:recordTarget/ns0:patientRole/ns0:patient/ns0:name/ns0:given/node())[fn:boolean(self::text())]">
<firstName>
<xsl:sequence select="fn:string(.)"/>
</firstName>

Antworten:

3 für die Antwort № 1

Hier ist eine Abbildung der fraglichen XPath 2.0-Funktionen:

XPath 2.0 XPath 1.0 Xalan-Java XSLT-C fn: exists () Zeichenfolgenlänge (concat (.,)) XPath 1.0 XPath 1.0 fn: string () string () XPath 1.0 XPath 1.0 fn: boolean () boolean () XPath 1.0 XPath 1.0

Die Algorithmen EXSLT, XSLTSL, FXSL und XPath können den Großteil der verbleibenden Funktionen ausfüllen.

XPath 2.0 FXSL XSLTSL EXSLT XPath 1.0 fn: max maximale rechnung: max fn: max dyn: max fn: min Minimum Mathematik: min fn: min dyn: min Fn: Summe Summe Mathematik: Summe Summe Fn: Summe Dyn: Summe Fn: avg Summe div count fn: boden boden Fn: Decke Decke fn: runde runde fn: abs math: abs fn: sammlung foldl op: verketten anhängen fn: doc Dokument fn: count count Fn: nicht nicht fn: wahr wahr fn: falsch falsch fn: boolean boolean fn: Großbuchstabe str: nach oben fn: Kleinbuchstabe str: to-lower fn: substring substring Fn: Stringlänge Stringlänge fn: normalize-space normalize-space fn: übersetzen übersetzen fn: concat str: concat concat fn: substring-before substring-before fn: substring-after substring-after fn: reverse str: rückwärts Fn: Einfügen vor str: Einfügen bei fn: passt zu str: string-match fn: tokenize str: tokenize fn: resolu-uri uri: resolu-uri Fn: Unterschiedliche Werte: Unterschiedlich op: union | op: Schnittmenge: Schnittmenge op: außer cmp: diff set: difference op: is-same-node cmp: cmp Fn: Positionsknoten: XPfadposition fn: last last Fn: Datenknoten: Typ fn: lang lang fn: current-dateTime Datum: Datum-Uhrzeit fn: dateTime dt: Format-Datum-Datum Datum: Format-Datum fn: year-from-date dt: get-xsd-datetime-year Datum: Tag im Jahr fn: month-from-dateTime dt: get-xsd-datetime-month Datum: Monatsname fn: day-from-dateTime dt: get-xsd-datetime-day Datum: day-name fn: stunden-von-datum-zeit dt: get-xsd-datetime-stunde datum: stundenstunde fn: Minuten-von-datum-Zeit tt: get-xsd-datetime-minuten-datum: Minute in Stunde Fn: Sekunden-from-dateTime dt: get-xsd-datetime-second Datum: Sekunden in Minute fn: timezone-from-dateTime dt: get-xsd-datetime-timezone if (...) dann (...) else (...) $ dynamic [$ var] | $ default [nicht ($ var)]

Verweise


2 für die Antwort № 2

Ich werde es versuchen, aber das ist nicht getestet:

<xsl:variable name="var1_ClinicalDocument" select="ns0:ClinicalDocument"/>
<DSMessage>
<DSPatient>
<xsl:for-each

select="$var1_ClinicalDocument[ns0:id/@root]">
<Source>
<xsl:value-of select="ns0:id/@root"/>
</Source>
</xsl:for-each>
<Demographics>
<xsl:for-each select="($var1_ClinicalDocument/ns0:recordTarget/ns0:patientRole/ns0:id)[@extension]">
<externalID>
<xsl:value-of select="@extension"/>
</externalID>
</xsl:for-each>
<xsl:for-each select="($var1_ClinicalDocument/ns0:recordTarget/ns0:patientRole/ns0:patient/ns0:name/ns0:given/node())[self::text()]">
<firstName>
<xsl:value-of select="."/>
</firstName>

Grundsätzlich die Verwendung von fn:exists, fn:string und fn:boolean kann natürlich ersetzt werden, wenn XPath / XSLT 2.0 verwendet wird tokenize oder for-each-group Sie benötigen mehr Arbeit und möglicherweise Xalan-spezifische Erweiterungsfunktionen.


1 für die Antwort № 3

Dies sollte eine nicht schlechte Übersetzung sein:

    <xsl:variable name="var1_ClinicalDocument" select="ns0:ClinicalDocument"/>
<DSMessage>
<DSPatient>
<xsl:for-each select="$var1_ClinicalDocument[ns0:id/@root]">
<Source>
<xsl:value-of select="ns0:id/@root"/>
</Source>
</xsl:for-each>
<Demographics>
<xsl:for-each select=
"($var1_ClinicalDocument/ns0:recordTarget
/ns0:patientRole/ns0:id)[@extension]">
<externalID>
<xsl:value-of select="concat(@extension, " ")"/>
</externalID>
</xsl:for-each>
<xsl:for-each select=
"$var1_ClinicalDocument/ns0:recordTarget/ns0:patientRole
/ns0:patient/ns0:name/ns0:given/text()">
<firstName>
<xsl:value-of select="."/>
</firstName>
</xsl:for-each>
</Demographics>
</DSPatient>
</DSMessage>