Skip to content

Instantly share code, notes, and snippets.

@animaux
Last active June 21, 2018 19:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save animaux/6cf803ac099b457cbe50 to your computer and use it in GitHub Desktop.
Save animaux/6cf803ac099b457cbe50 to your computer and use it in GitHub Desktop.
Symphony CMS Page consuming external XML via a external datasource and transforming some content for XML-import. #symphony-cms
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
extension-element-prefixes="dyn exslt str"
xmlns:exslt="http://exslt.org/common"
xmlns:dyn="http://exslt.org/dynamic"
xmlns:str="http://exslt.org/strings">
<xsl:output method="xml"
encoding="UTF-8"
indent="yes"
cdata-section-elements="Inhaltsangabe" />
<xsl:strip-space elements="*"/>
<!-- Umformen der Seminar-XML-Daten + Zuordnung der Personen -->
<xsl:template match="/">
<tagungen>
<xsl:apply-templates select="/data/seminar/entry"/>
</tagungen>
</xsl:template>
<xsl:template match="/data/seminar/entry">
<entry id="{@id}">
<xsl:for-each select="*">
<xsl:choose>
<!-- Zuordnung der Personen Leitung -->
<xsl:when test="name()='Leitung'">
<Leitung>
<xsl:if test=". != ''">
<xsl:call-template name="person_ids"/>
</xsl:if>
</Leitung>
</xsl:when>
<!-- Zuordnung der Personen Tagungsassistenz -->
<xsl:when test="name()='Assistenz'">
<Leitung>
<xsl:if test=". != ''">
<xsl:call-template name="person_ids"/>
</xsl:if>
</Leitung>
</xsl:when>
<!-- Linebreaks im Titel entfernen? -->
<!--
<xsl:when test="name()='Titel'">
<Titel><xsl:value-of select="normalize-space(.)" /></Titel>
</xsl:when>
-->
<!-- Boolesche Werte anpassen -->
<xsl:when test="name()='UhrAnzeigen' or
name()='Geloescht' or
name()='Anmeldung'">
<xsl:element name="{name()}">
<xsl:choose>
<xsl:when test=". = 'Y'">
<xsl:text>Yes</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>No</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</xsl:when>
<!-- Alle anderen Felder wie die Quelle ausgeben -->
<xsl:otherwise>
<xsl:element name="{name()}"><xsl:value-of select="."/></xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</entry>
</xsl:template>
<!-- Zuordnung der Personen -->
<xsl:template match="text()" name="person_ids">
<xsl:param name="pText" select="."/>
<xsl:if test="string-length($pText) > 0">
<xsl:variable name="vNextItem" select="substring-before(concat($pText, ','), ',')"/>
<xsl:if test="/data/personen/entry[name=$vNextItem]/@id">
<item><xsl:value-of select="/data/personen/entry[name=$vNextItem]/@id"/></item>
</xsl:if>
<xsl:call-template name="person_ids">
<xsl:with-param name="pText" select="substring-after($pText, ',')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment