2012-05-22 9 views
17

Ich benutze XSLT, um eine sehr einfache Transformation in einem XML-Dokument. Ich möchte nur alle Elementknoten mit einem bestimmten Namen löschen. Es passiert, dass in meinem Quelldokument alle diese Knoten am Ende des Dokuments befinden, aber nach der Transformation, obwohl die Knoten verschwunden sind, wie ich es beabsichtigte, gibt es viele leere Zeilen an ihrer Stelle.bekomme Fahrt von leeren Zeilen nach dem Löschen von Knoten mit XSLT

Dies ist ausschließlich ein kosmetisches Problem, da ich erreicht habe, was ich mit der Transformation wollte, aber aus Neugier: Wie kann ich diese leeren Linien loswerden? Diese ist die XSL-Datei, die ich für die Transformation verwendet (das Element I entfernen wollte, ist der Name „Beziehungen“):

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" /> 

    <xsl:template match="*"> 
    <xsl:copy> 
     <xsl:copy-of select="@*" /> 
     <xsl:apply-templates/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="relation"/> 

</xsl:stylesheet> 

Antwort

21

Der Grund dafür ist in dem weißen Raum-nur Textknoten, die sofortigen Geschwister sind zu die gelöschten Elemente.

Lösung: Einfach diese XSLT-Anweisung fügen Sie all white-space-nur Textknoten entfernen - noch bevor die Transformation gestartet wird:

<xsl:strip-space elements="*"/> 

Das Ergebnis Einzug verlieren kann - wenn ja, fügt dies:

<xsl:output omit-xml-declaration="yes" indent="yes"/> 

Die vollständige Umwandlung wird:

wenn auf diesem XML-Dokument angewandt (keine angegeben!):

<nums> 
    <num>01</num> 
    <num>02</num> 
    <num>03</num> 
    <num>04</num> 
    <num>05</num> 
    <num>06</num> 
    <num>07</num> 
    <num>08</num> 
    <num>09</num> 
    <num>10</num> 

    <relation/> 
    <relation/> 
    <relation/> 
    <relation/> 
    <relation/> 
    <relation/> 
    <relation/> 
    <relation/> 
</nums> 

Der wollte, richtiges Ergebnis (kein Hinter white-space) hergestellt wird:

<nums> 
    <num>01</num> 
    <num>02</num> 
    <num>03</num> 
    <num>04</num> 
    <num>05</num> 
    <num>06</num> 
    <num>07</num> 
    <num>08</num> 
    <num>09</num> 
    <num>10</num> 
</nums> 
+2

die einzige caveat Ich würde hinzufügen ist: Bevor Sie xsl: strip-space zu Ihrem Stylesheet hinzufügen, überprüfen Sie, dass das Quelldokument keine signifikanten Leerzeichen Textknoten, dh Leerzeichen in gemischtem Inhalt enthält. –

+1

gibt es eine Möglichkeit zu sagen, dass ich den weißen Raum nur zu den Geschwistern der 'relation' Knoten entfernen möchte? – Sergio

+1

@Sergio: Ja: benutze: '' –

Verwandte Themen