2012-05-22 14 views
17

Sto usando XSLT per effettuare una trasformazione molto semplice in un documento XML. Voglio solo cancellare tutti i nodi degli elementi con un nome particolare. Succede che nel mio documento sorgente tutti questi nodi si trovano alla fine del documento, ma dopo la trasformazione, anche se i nodi sono scomparsi come volevo, ci sono molte linee vuote al loro posto.ottenere corse di linee vuote dopo aver eliminato i nodi utilizzando XSLT

Questo è strettamente un problema estetico poiché ho realizzato ciò che volevo con la trasformazione, ma per curiosità: come posso liberarmi di queste linee vuote? Questo è il file XSL ho usato per la trasformazione (l'elemento che volevo per rimuovere il nome di "relazioni"):

<?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> 

risposta

21

Il motivo è nei nodi che contengono spazio bianco solo che sono fratelli immediate alle gli elementi cancellati.

Soluzione: Basta aggiungere questa istruzione XSLT per rimuovere tutti i nodi che contengono spazio bianco di sola - anche prima che la trasformazione è iniziata:

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

Il risultato può perdere indentazione - in caso affermativo, aggiungere questo:

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

La trasformazione completa diventa:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

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

se applicato su questo documento XML (nessuno fornito!):

<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> 

The Wanted, risultato corretto (senza trailing spazio bianco) viene prodotto:

<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

L'unica L'avvertimento che vorrei aggiungere è: prima di aggiungere xsl: strip-space al tuo foglio di stile, controlla che il documento di origine non contenga nodi di testo di spazi vuoti significativi, cioè spazi bianchi in contenuti misti. –

+1

c'è un modo per dire che voglio togliere lo spazio bianco solo ai fratelli dei nodi 'relazione'? – Sergio

+1

@Sergio: Sì: usa: '' –

Problemi correlati