da kein Code rate ich mal
<xsl:text> <xsl:value-of selext=""/></xsl:text>
Hagemann Helmut
Hallo,
nach einer XSLT Transformation kommt bei mir folgendes raus:
Tag1
Tag2
Tag3
D.h. es sind zuviele Leerzeichen dazwischen. Ich habe es mit <xsl:strip-space elements="*"/> versucht. Nun sind natürlich alle weg, aber auch die Umbrüche d.h. ich habe Tag1Tag2Tag3. Ein Zeilenumbruch sollte jedoch erhalten bleiben, d.h.
Tag1
Tag2
Tag3
Hat jeman ne Idee?
da kein Code rate ich mal
<xsl:text> <xsl:value-of selext=""/></xsl:text>
Hagemann Helmut
Hallo,
Ziel bei mir ist folgendes: Ich habe ein XML Dokument, aus dem sollen einige Tags entfernt werden, der Rest soll wie er ist drin stehen bleiben.
Ich filtere "unerwünschte" Tags einfach raus, indem ich ein Template erstelle, das den Tag matcht und darin steht einfach gar nichts. Ala match="tagname></xsl:template>
Damit der Rest drin bleibt habe ich ein Template was alle anderen Knoten matcht und mittels xsl:copy wieder einbringt... Wo im alten Dokument die alten Knoten bzw. Tags standen die ich nun entfernt habe, sind einfach eine Menge von Leerzeilen dazwischen
Also ich habe eine Glaskugel zerdeppert, 2 Liter Kaffee getrunken um aus dem Satz zu lesen. Bevor ich jetzt irgendein Tier opfere um aus den Eingeweiden zu lesen, wäre vielleicht doch irgendwas an Quelltext sinnvoll.
Je größer der Deppenfaktor, desto gigantischer das Bescheidwissergefühl
-Dieter Nuhr
Hallo,
entfernen tue ich die entsprechenden Tags so:
<!--****************************************************************
** "<Tagname>" entfernen
*************************************************************-->
<xsl:template match="Tagname">
</xsl:template>
Wobei Tagname hier für den entsprechenden Tag steht. Damit die anderen Tags, für die kein solches Template angegeben ist erhalten bleiben, nutze ich:
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
Wenn vorher also z.B. das XML Dokument so aussah:
<tag1>bla</tag1>
<tag2>bla</tag2>
<tag3>bla</tag3>
<tag4>bla</tag4>
und ich tag2 und 3 entferne, dann sieht es so aus:
<tag1>bla</tag1>
<tag4>bla</tag4>
die Leerzeilen sollen aber raus, damit nur
<tag1>bla</tag1>
<tag4>bla</tag4>
stehenbleibt
habe getest mit xml file
Code:<?xml version="1.0" encoding="UTF-8"?> <root> <tag1 id="1">A </tag1> <tag2 id="2">B </tag2> <tag3 id="3">C </tag3> <tag4 id="4">D </tag4> </root>
das problem liegt an einen newline in der xml eingabe dateiCode:<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output indent="yes" method="xml" encoding="utf-8"/> <xsl:template match="/"> <root> <xsl:apply-templates select="//tag1|//tag4"/> </root> </xsl:template> <xsl:template match="tag1|tag4"> <xsl:element name="{local-name(.)}"> <xsl:attribute name="id"> <xsl:value-of select="./@id"/> </xsl:attribute> </xsl:element> </xsl:template> </xsl:stylesheet>
mal an schauen wie die Datei erzeugt wird newline entfernen
dann gehts es mit deiner xslt
Helmut Hagemann
Hallo,
Danke für deine Antwort. Auf die Quell XML Datei habe ich aber keinen Einfluss. Die soll so von den Benutzern kommen. Deshalb wäre es schon günstig generell die unnötigen Leerzeilen zu entfernen. Noch Ideen?
mit deine test daten ist es mir nicht möglich deine probleme
bester zu erkennen damit ist der weg mit copy gestorben
zeige dochmal die orignal xml und was herraus kommen soll
Helmut Hagemann
Hallo,
ich bin dir sehr dankbar. Aber die Datei sieht nicht anders aus als die Testdaten. Der Fehler kommt ja schon bei diesen Testdaten, d.h. es müsste erstmal da klappen.
Problemstellung:
Entferne Tags mit bestimmten Namen, erhalte restliche Tags die in XML Datei stehen. Das geht ja auch. Nur leider sind halt diese Leerzeilen zuviel. Wenn du ein Beispiel hast, was die o.g. Problemstellung ohne Leerzeilen zuviel löst, würde mich das auch schon weiter bringen :-)
Code:<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output indent="yes" method="xml" encoding="utf-8"/> <xsl:template match="/"> <root> <xsl:apply-templates select="//tag1|//tag4"/> </root> </xsl:template> <xsl:template match="tag1|tag4"> <xsl:element name="{local-name(.)}"> <xsl:value-of select="normalize-space(translate(.,'
',''))"/> <!-- falls attribute <xsl:attribute name="id"> <xsl:value-of select="./@id"/> </xsl:attribute>--> </xsl:element> </xsl:template> </xsl:stylesheet>
Hi,
scheint ja vielversprechend. Werde ich demnächst mal testen. Was macht deine Lösung aber mit anderen Tags, z.B. tag7,tag10 die ja alle wie sie sind übernommen werden sollen? Das wird doch ne Menge schreibarbeit, oder?
nur angeben welcher knoten ausgeben sollCode:<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output indent="yes" method="xml" encoding="utf-8"/> <xsl:template match="/"> <root> <xsl:apply-templates select="child::root/*"/> </root> </xsl:template> <xsl:template match="node()"> </xsl:template> <xsl:template match="tag1|tag4"> <xsl:element name="{local-name(.)}"> <xsl:value-of select="normalize-space(translate(.,'
',''))"/> <!-- falls attribute <xsl:attribute name="id"> <xsl:value-of select="./@id"/> </xsl:attribute>--> </xsl:element> </xsl:template> </xsl:stylesheet>
Helmut Hagemann
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)