diomed
3/21/2016 - 6:58 PM

Symphony CMS Page consuming external XML via a external datasource and transforming some content for XML-import.

Symphony CMS Page consuming external XML via a external datasource and transforming some content for XML-import.

<?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>