Processing Instruction innerhalb eines tags löschen

Transmitter

Erfahrenes Mitglied
Hi,

ich habe folgendes:
Code:
<titel>das ist ein <?ZP?> titel</titel>
und will das bekommen:
Code:
<titel>das ist ein titel</titel>

Jetzt würde ich gerne <?ZP?> aber NUR innerhalb von <titel> löschen. Im restlichen XML soll es durch <br /> ersetzt werden:

Code:
<xsl:template match="processing-instruction('ZP')">
<br />
</xsl:template>

Das funktioniert soweit auch, nur leider funktioniert sowas nicht:
Code:
<xsl:template match="titel|processing-instruction('ZP')">
  <xsl:apply-templates />
</xsl:template>
Dabei wird titel gelöscht, aber ZP durch <br /> ersetzt.

Code:
<xsl:template match="titel|processing-instruction('ZP')">
  <xsl:text></xsl:text>
</xsl:template>
Dabei wird <titel>, Text und ZP gelöscht.

Code:
<xsl:template match="titel">
<xsl:template match="processing-instruction('ZP')">
  <xsl:text></xsl:text>
</xsl:template>
</xsl:template>
Ist kein valides XSLT :(

Kann mir dabei jemand helfen?
Bin leider noch recht neu in XSLT und habe zu dem verschachtelten Problem nichts gefunden.

Danke schon mal
Bye, Transmitter
 
Hi.

Probier mal:
XML:
<xsl:template match="titel/processing-instruction('ZP')" />
Gruß
 
Zuletzt bearbeitet von einem Moderator:
Code:
<xsl:template match="titel/processing-instruction('ZP')" />
<xsl:apply-templates/>
<xsl:template>

<xsl:template match="processing-instruction('ZP')" />
<br/>
<xsl:template>
Warning:
The child axis starting at a processing-instruction node will never select anything

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

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

Hier passiert gar nichts außer ZP wird nur in br gewandelt.
 
Also bei mir funktioniert es wie gewünscht:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="text" />


<xsl:template match="title/processing-instruction('ZP')">
Welt.
</xsl:template>

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

</xsl:stylesheet>
Eingabe:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<Test>
<title>Hello <?ZP?></title>
<other><?ZP?></other>
</Test>
Ausgabe:
Code:
Hello World.
break
Gruß
 
Zuletzt bearbeitet von einem Moderator:
Ok .. bei mir klappt es so auch, aber nur wenn ich einen Barebone aus allem baue.
XML -> XSLT -> XML

Wenn ich es allerdings im gesamten Prozess ausführe, wird alles durch br ersetzt, auch das was innerhalb von titel steht. (ein und dieselbe XSLT Datei).

Jetzt ist es recht viel Code, deswegen nur die Frage:
Hast du eine Idee woran es liegen könnte?
Erfahrungsschatz, wo bei XSLT häufig Probleme bei Neulingen auftauchen?
Reihenfolge der Anweisungen o. Ä.?
 
Ok .. bei mir klappt es so auch, aber nur wenn ich einen Barebone aus allem baue.
XML -> XSLT -> XML

Wenn ich es allerdings im gesamten Prozess ausführe, wird alles durch br ersetzt, auch das was innerhalb von titel steht. (ein und dieselbe XSLT Datei).

Jetzt ist es recht viel Code, deswegen nur die Frage:
Hast du eine Idee woran es liegen könnte?
Namensräume?

Gruß
 
Danke dir für deine Hilfe!

Saublöd .. es lag an einem vorgelagerten Java Programm welches erst mal alle ZP ersetzt hat durch br. Danach durfte das XSLT noch drüber und das auch noch mal machen - aber an dieser Stelle war nichts mehr zu tun.
Jetzt funtkioniert es auch innerhalb des ganzen Prozesses.
 

Neue Beiträge

Zurück