gast: und PHP: Wie <strong>, <em>, ... umsetzen?

Hi,

Situationsbeschreibung:

Ich verwende die neue DOM-Extension mit XSL-Processor von PHP (v.5.0.1), um ein modifiziertes XML-Dokument durch ein vorhandenes Stylesheet in HTML umzuwandeln und auf dem Browser auszugeben.

Verwendete XML-Struktur:

<dokument>
 <text>Foo<fett>bar</fett>.</text>
</dokument>

Verwendetes XSL-Stylesheet (Ausschnitt):

<xsl:template match="/dokument/text">
<textarea>
<xsl:apply-templates />
</textarea>
</xsl:template>

<xsl:template match="//fett">
&lt;strong&gt;<xsl:value-of select="*" />&lt;/strong&gt;
</xsl:template>

Problembeschreibung:

Lade ich nun das XML-Dokument das erste Mal, ohne, dass es durch PHP modifiziert wurde, dann wird alles korrekt angezeigt. Sprich es wird eine Textarea mit dem Folgenden PCDATA angezeigt:
"Foo<strong>bar</strong>."

Nun: modifiziere ich das XML-Dokument mit DOM, dann liefert mir die Ausgabe auf dem Browser eine leere Textarea zurück, d.h. das PCDATA verschwindet einfach.

Das kurioseste dabei ist: speichere ich die modifizierte XML-Datei ab (mit save()) und lade die Seite neu, wird alles wieder richtig angezeigt.

Was mache ich da falsch? Ich bin um jede Hilfe Dankbar.
Gast

  1. Hallo,

    Verwendetes XSL-Stylesheet (Ausschnitt):
    ...
    <xsl:template match="//fett">
    &lt;strong&gt;<xsl:value-of select="*" />&lt;/strong&gt;
    </xsl:template>

    Die Entitys werden einfach ausgegeben, aber nicht als spitze Klammern umgesetzt!

    Hier sollte stehen:
    <strong><xsl:value-of select="." /></strong>

    Um ein < in die Ausgabe zu bekommen, waere zu schreiben:
    <xsl:text disable-output-escaping="yes">&lt;</xsl:text>

    Das braucht man in diesem Fall aber nicht. Schreibe die Tags literaler Elemente einfach in das Stylesheet.

    MfG, Thomas

    1. Hi,

      ich möchte ja nicht, dass der Text zwischen den beiden Tags fett dargestellt wird (was ja in einer Textarea gar nicht ginge), sondern ich möchte den Tag im Textfeld stehen haben. Da kann ich ja nicht einfach <strong>foo</strong> schreiben, da es sich hierbei nicht um PCDATA handelt.

      gast

      1. Hallo,

        ich möchte ja nicht, dass der Text zwischen den beiden Tags fett dargestellt wird (was ja in einer Textarea gar nicht ginge), sondern ich möchte den Tag im Textfeld stehen haben. Da kann ich ja nicht einfach <strong>foo</strong> schreiben, da es sich hierbei nicht um PCDATA handelt.

        Im Ausgangsposting steht steht mal kurz etwas von textarea. Das haette IMHO in den XSL-Code gehoert.

        Dann steht dort noch: "modifiziere ich das XML-Dokument mit DOM, dann liefert mir die Ausgabe auf dem Browser eine leere Textarea zurück".

        Was passiert da DOM-technisch genau?

        MfG, Thomas

  2. Hallo,

    <xsl:template match="//fett">
    &lt;strong&gt;<xsl:value-of select="*" />&lt;/strong&gt;
    </xsl:template>

    Wenn schon, dann bitte <xsl:value-of select="." /> schreiben.

    Nun: modifiziere ich das XML-Dokument mit DOM, dann liefert mir die Ausgabe auf dem Browser eine leere Textarea zurück, d.h. das PCDATA verschwindet einfach.

    Was heisst das bitte genau hier. Womit modifiziertst du das XML (ja, DOM, aber weiterhin mit PHP, oder Javascript?) und wann, und was modifizierst du daran?

    Grüße
    Thomas