Announcement

Collapse
No announcement yet.

xml zu xml mittels xslt - CDATA Problem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • xml zu xml mittels xslt - CDATA Problem

    Hallo,

    ich habe folgendes Problem: Ich soll ein bestehendes XML in ein anderes überführen und dabei alle Texte in CDATA kontrukte packen.
    Dies ist mir auch bei einem gelungen, aber bei einem zweiten Tag leider nicht.

    Hier dazu mal die XML und XLS:

    xml:
    Code:
    <copy>
    <head>
    <artikel file="" id="1560302" suchbar="true" suchprio="MITTEL"/>
    <tags/>
    <keywords/>
    <src id="" name=""/>
    <schaltungszeit bis="0000-00-00 00:00:00" mail="KEINE" von="2009-08-09 17:17:00"/>
    <et et="2009-08-09 00:00:00"/>
    <name>Sachsens SPD warnt vor Marktradikalismus der bürgerlichen Parteien</name>
    <status online="online"/>
    <prio prio="100" priocount="0" priostop="0" priotime="0"/>
    <template atmpl="" name="Artikel"/>
    <cmsurl>THEMEN</cmsurl><pi>0</pi><comments>0</comments><urlhl>Sachsens-SPD-warnt-vor-Marktradikalismus-der-buergerlichen-Parteien</urlhl></head>
    <body>
    <box type="HL"> Sachsens SPD warnt vor Marktradikalismus der bürgerlichen Parteien </box>
    <box type="SHL"> "Wirtschaft funktioniert nur dann, wenn sie nicht nur wenige reich macht" </box>
    <box type="BT">
    <p>Leipzig (ddp). Die sächsische SPD hat zum Auftakt ihres Landtagswahlkampfes vor einer marktradikalen Politik von CDU und FDP gewarnt. "Wirtschaft funktioniert nur dann, wenn sie nicht nur wenige reich macht", sagte Wirtschaftsminister und Spitzenkandidat Thomas Jurk (SPD) am Sonntag auf dem Leipziger Augustusplatz vor rund 300 Zuhörern.</p>
    <p>Wer mitten in der Wirtschaftskrise Steuersenkungen verspreche, mache sich komplett unglaubwürdig. Denn solche Steuergeschenke müssten bezahlt werden, und Schwarz-Gelb wolle sie bezahlen durch Kürzungen bei Bildung, im Sozialen und auf dem Arbeitsmarkt, sagte Jurk. Die SPD sei in den vergangenen Jahren in Sachsen der "Motor der Regierung" gewesen und Garant für eine soziale Politik im Freistaat. Mit Nachdruck warben Jurk und Bundesverkehrsminister Wolfgang Tiefensee (SPD) für einen gesetzlichen Mindestlohn von 7,50 Euro pro Stunde.</p>
    <p>Brandenburgs Ministerpräsident Matthias Platzeck (SPD) erinnerte an den Leipziger Parteitag der CDU von 2005, wo die Union ein marktradikales Programm beschlossen habe, das sie zusammen mit der FDP hätte umsetzen wollen. "Da wollen die wieder hin", sagte Platzeck. Wenn es nach der Bundestagswahl am 27. September eine Mehrheit für Schwarz-Geld gebe, "dann bestellt Westerwelle Schampus" und beide Parteien würden ungeachtet der Wirtschaftskrise sofort das alte Programm umsetzen, warnte er. Für die SPD hingegen könne es kein Zurück zu "marktradikalen Mechanismen" geben. "Lassen wir nie wieder eine Marktwirtschaft zu, die auf Regeln verzichtet", sagte Platzeck.</p>
    <p>In Sachsen wird am 30. August ein neuer Landtag gewählt. 2004 war die Sachsen-SPD auf katastrophale 9,8 Prozent der Wählerstimmen gekommen. Weil aber auch die Union ihre absolute Mehrheit verloren hatte, regieren seitdem beiden Parteien in einer Koalition.</p>
    <p>(ddp) </p>
    <mbox id="3434475" preview="/MEDIEN/BILDER/44/75/3434475.jpg" source="/MEDIEN/BILDER/44/75/3434475.jpg" type="IMG">
    <box type="BU"/>
    <box type="CR">ddp</box>
    </mbox>
    </box>
    <meta>
    <var type="KEYWORDS">Sachsen Wahlkampf SPD </var>
    </meta>
    </body>
    </copy>
    xsl:

    Code:
    <?xml version="1.0"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:external="http://ExternalFunction.xalan-c++.xml.apache.org" exclude-result-prefixes="external">
        <xsl:output method="text/xml" omit-xml-declaration="yes" encoding="utf-8" indent="no" cdata-section-elements="teaser text"/> 
    	<xsl:strip-space elements="*" />
    
    	<xsl:template match="copy">
    		<item>
    			<xsl:apply-templates select="head/name"/>
    			<link/>
    			<xsl:apply-templates select="head/artikel/@id"/>
    			<xsl:apply-templates select="body/box[@type='SHL']"/>
    			<subtitle/>
    			<ressort/>
    			<dachzeile/>
    			<text><xsl:apply-templates select="body/box[@type='BT']/p"/></text>
    			<related/>
    			<changeDate/>
    			<images>
    				<image>
    					<url><xsl:apply-templates select="body/box[@type='BT']/mbox/@source"/></url>
    					<bildtitle><xsl:apply-templates select="body/box[@type='BT']/box[@type='BU']"/></bildtitle>
    					<height/>
    					<width/>
    				</image>
    			</images>
    			<pubDate><xsl:apply-templates select="head/schaltungszeit/@von"/></pubDate> 
    			<author/>
    		</item>
    	</xsl:template>
    
    	<xsl:template match="head/name">
    		<title>
    			<xsl:value-of select="." />
    		</title>
    	</xsl:template>
    
    	<xsl:template match="head/artikel/@id">
    		<id>
    			<xsl:value-of select="." />
    		</id>
    	</xsl:template>
    
    	<xsl:template match="body/box[@type='SHL']">
    		<teaser>
    			<xsl:value-of select="." />
    		</teaser>
    	</xsl:template>
    
    	<xsl:template match="body/box[@type='BT']/p">
    		<xsl:copy-of select="."/> 
    	</xsl:template>
    
    	<xsl:template match="body/box[@type='BT']/mbox/@source">
    		<xsl:value-of select="." />
    	</xsl:template>
    
    	<xsl:template match="body/box[@type='BT']/box[@type='BU']">
    		<xsl:value-of select="." />
    	</xsl:template>
    
    	<xsl:template match="head/schaltungszeit/@von">
    		<xsl:value-of select="." />
    	</xsl:template>
    
    </xsl:stylesheet>
    ergebnis-xml:

    Code:
    <item>
    <title>Sachsens SPD warnt vor Marktradikalismus der bürgerlichen Parteien</title>
    <link/>
    <id>1560302</id>
    <teaser><![CDATA[ "Wirtschaft funktioniert nur dann, wenn sie nicht nur wenige reich macht" ]]></teaser>
    <subtitle/>
    <ressort/>
    <dachzeile/>
    <text><p>Leipzig (ddp). Die sächsische SPD hat zum Auftakt ihres Landtagswahlkampfes vor einer marktradikalen Politik von CDU und FDP gewarnt. "Wirtschaft funktioniert nur dann, wenn sie nicht nur wenige reich macht", sagte Wirtschaftsminister und Spitzenkandidat Thomas Jurk (SPD) am Sonntag auf dem Leipziger Augustusplatz vor rund 300 Zuhörern.</p><p>Wer mitten in der Wirtschaftskrise Steuersenkungen verspreche, mache sich komplett unglaubwürdig. Denn solche Steuergeschenke müssten bezahlt werden, und Schwarz-Gelb wolle sie bezahlen durch Kürzungen bei Bildung, im Sozialen und auf dem Arbeitsmarkt, sagte Jurk. Die SPD sei in den vergangenen Jahren in Sachsen der "Motor der Regierung" gewesen und Garant für eine soziale Politik im Freistaat. Mit Nachdruck warben Jurk und Bundesverkehrsminister Wolfgang Tiefensee (SPD) für einen gesetzlichen Mindestlohn von 7,50 Euro pro Stunde.</p><p>Brandenburgs Ministerpräsident Matthias Platzeck (SPD) erinnerte an den Leipziger Parteitag der CDU von 2005, wo die Union ein marktradikales Programm beschlossen habe, das sie zusammen mit der FDP hätte umsetzen wollen. "Da wollen die wieder hin", sagte Platzeck. Wenn es nach der Bundestagswahl am 27. September eine Mehrheit für Schwarz-Geld gebe, "dann bestellt Westerwelle Schampus" und beide Parteien würden ungeachtet der Wirtschaftskrise sofort das alte Programm umsetzen, warnte er. Für die SPD hingegen könne es kein Zurück zu "marktradikalen Mechanismen" geben. "Lassen wir nie wieder eine Marktwirtschaft zu, die auf Regeln verzichtet", sagte Platzeck.</p><p>In Sachsen wird am 30. August ein neuer Landtag gewählt. 2004 war die Sachsen-SPD auf katastrophale 9,8 Prozent der Wählerstimmen gekommen. Weil aber auch die Union ihre absolute Mehrheit verloren hatte, regieren seitdem beiden Parteien in einer Koalition.</p><p>(ddp)</p></text>
    <related/>
    <changeDate/>
    <images>
    <image>
    <url>/MEDIEN/BILDER/44/75/3434475.jpg</url>
    <bildtitle/>
    <height/>
    <width/>
    </image>
    </images>
    <pubDate>2009-08-09 17:17:00</pubDate>
    <author/>
    </item>
    Das Problem sieht nun wie folgt aus:
    bei dem <teaser> tag funktioniert die Verwendung von cdata wunderbar und nun soll es das auch bei dem <text> tag tun. Das wiederrum funktioniert nicht. Es ist mir nicht klar warum. Wenn ich statt <text> <p> auswähle funktioniert es. aber das ist nicht sind der Sache, da die <p>-tag mit im Text drin stehn soll (laut Vorgabe).

    Ich hoffe ihr könnt mir da weiterhelfen. Vielen Dank im Vorraus, wenn das der Fall sein sollte.

    LG
    ErdbeerEis

  • #2
    Eine CDATA-Sektion macht nur Sinn bzw. ist nur möglich, wenn das Element reinen Textinhalt hat. Du kopierst aber ein "p"-Element in das "text"-Element. So das nicht gewollt ist, sondern der Markup für das "p"-Element maskiert werden soll, muss man es erst serialisieren, das geht mit einer Erweiterungsfunktion oder aber in reinem XSLT wie z.B. unter http://lenzconsulting.com/xml-to-string/ dargestellt.

    Comment


    • #3
      Workaround zur Ausgabe der CDATA-Sections:

      Code:
      <text>
        <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text>	
        <xsl:apply-templates select="body/box[@type='BT']/p"/>
        <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>
      </text>
      text dann ggf. bei cdata-section-elements="..." weglassen.

      BTW: Ändere die Ausgabemethode in method="xml".

      Comment


      • #4
        Vielen lieben Dank.

        Das klappt so und ich hab wieder was gelernt

        Comment

        Working...
        X