<Tag> durch \n ersetzen

Transmitter

Erfahrenes Mitglied
Hi,

ich habe ein XML, welches Tags enthält wie:
<?ZP?>
oder
<ZZ5>Text </ZZ5>
Wie muss die XSL Anweisung denn aussehen, um in allen Knoten zu suchen und das <?ZP?> durch \n zu ersetzen?

Und beim zweiten genau die gleiche Frage. Da habe ich ein öffnendes und ein schließendes Tag und würde beide gern ersetzen. Wie sieht denn das XSL dazu aus?

Habe das schon durch: http://www.med.uni-giessen.de/akkk/xml/xslt/ aber irgendwie klappt die Umsetzung auf mein Beispiel nicht (rein geistig gesehen ;))

Danke schon mal
Bye, Transmitter
 
Hi.
ich habe ein XML, welches Tags enthält wie:
<?ZP?>
...
<ZZ5>Text </ZZ5>
Wie muss die XSL Anweisung denn aussehen, um in allen Knoten zu suchen und das <?ZP?> durch \n zu ersetzen?
XML:
<xsl:template match="ZZ5 | processing-instruction('ZP')">
  <xsl:text>
</xsl:text>
</xsl:template>
Gruß
 
Zuletzt bearbeitet von einem Moderator:
Wenn ich deinen Code laufen lasse, wird mir alles aus dem Dokument gelöscht.
Erst mal das ZP Problem:

Hier nochmal mein source:
Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE Import SYSTEM "import.dtd">
<Import>
  <Article>
    <Text>Absatz 1
      <?ZP?>
        Absatz 2
      <?ZP?>
        Absatz 3
    </Text>
  </Article>
</Import>

und destination:
Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE Import SYSTEM "import.dtd">
<Import>
  <Article>
    <Text>Absatz 1 \n
        Absatz 2 \n
        Absatz 3 \n
    </Text>
  </Article>
</Import>

Stimmt das XSLT dann so?
 
Na das von dir.
Aber das hier hatte ich auch ausprobiert:
HTML:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/TR/REC-html40">
<xsl:output method="xml"/>
<xsl:template match="/">
</xsl:template>

<xsl:template match='*'>
    <xsl:element name="element">
        <xsl:attribute name="name"><xsl:value-of select='name()'/></xsl:attribute>
        <xsl:apply-templates select="*|@*|text()|comment()|processing-instruction()"/>
    </xsl:element>
</xsl:template>

<xsl:template match="ZZ5 | processing-instruction('ZP')">
    <xsl:text>
    </xsl:text>
</xsl:template>

</xsl:transform>
Aber damit kommt wie gesagt nichts mehr raus außer:
HTML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 
Ich habe keinen vollständigen Stylesheet angegeben, sondern nur ein Template. Den Rest solltest du schon selbst ausfüllen, ich weiß schließlich nicht wie du die Elemente verarbeiten willst.
Aber das hier hatte ich auch ausprobiert:
HTML:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/TR/REC-html40">
<xsl:output method="xml"/>
<xsl:template match="/">
</xsl:template>

<xsl:template match='*'>
    <xsl:element name="element">
        <xsl:attribute name="name"><xsl:value-of select='name()'/></xsl:attribute>
        <xsl:apply-templates select="*|@*|text()|comment()|processing-instruction()"/>
    </xsl:element>
</xsl:template>

<xsl:template match="ZZ5 | processing-instruction('ZP')">
    <xsl:text>
    </xsl:text>
</xsl:template>

</xsl:transform>
Aber damit kommt wie gesagt nichts mehr raus außer:
HTML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
Das ist auch nicht verwunderlich, denn du hast in deinem Root-Template nichts angegeben. Dann passiert da natürlich auch nichts weiter.

Gruß
 
Stimmt, das habe ich raus genommen.
Jetzt würde ich gerne einfach die Zeichen
<?ZP?> durch \n oder <br /> ersetzen. Das geht beides.
Oder zum Testen auch durch nichts. Hauptsache es funktioniert irgendwas.

So sieht mein XSLT aus:
HTML:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/TR/REC-html40">
<xsl:output method="xml"/>

<xsl:template match="ZZ5">
	<xsl:text>
	</xsl:text>
</xsl:template>

</xsl:transform>

Ich bekomme vom Parser aber eine Fehlermeldung:
Code:
 Error on line 1 column 39 of Artikel2.xml:
  SXXP0003: Error reported by XML parser: Content is not allowed in prolog.
Exception in component tXSLT_1
net.sf.saxon.trans.XPathException: org.xml.sax.SAXParseException: Content is not allowed in prolog.
	at net.sf.saxon.event.Sender.sendSAXSource(Sender.java:418)
	at net.sf.saxon.event.Sender.send(Sender.java:214)
	at net.sf.saxon.event.Sender.send(Sender.java:50)

Ich habe dazu zwar was gefunden, aber die meisten meinen es läge an einem
falsch kompilierten Parser. Das kann ich mir nicht vorstellen.
Hier liegt es sicher am Quell-Dokument oder am XSLT.
Oder?
 
Ich bekomme vom Parser aber eine Fehlermeldung:
Code:
 Error on line 1 column 39 of Artikel2.xml:

Ich habe dazu zwar was gefunden, aber die meisten meinen es läge an einem
falsch kompilierten Parser. Das kann ich mir nicht vorstellen.
Hier liegt es sicher am Quell-Dokument oder am XSLT.
Oder?
Der Parser hat doch ziemlich klar gesagt wo der Fehler liegt.

Gruß
 
Mit viel hin und her und ausprobieren habe ich es jetzt hinbekommen, der Parser läuft durch und ein Teil wird ersetzt.
 
Zurück