Mostra notizie nelle discussioni
  • Avatar
    ☺
    Scritto da
    ::1
    il 2013-01-24 08:44:01.0 alle 2013-01-24 08:44:01.0
    Trollate totali: 12321
    [xsl] il ripulitore
    Lavorando coi parser xml di java 1.4 spesso mi è più facile fare una pulizia preliminare del file, così ho messo a punto questo xsl che fa le seguenti operazioni:
    - elimina i namespaces: anche se non è cosa buona e giusta in molti casi mi semplifica il lavoro (col rischio di toppare qualcosa però, con gli input esterni, che valido prima via xsd però)
    - normalizza gli spazi: toglie gli spazi intorno al testo contenuto nei tags
    - elimina i tag vuoti ricorsivamente

    Un esempio di trasformazione, con questo input:
    <person xmlns:xsi="ciao">
    	<name>
    		mickey mouse
    	</name>
    	<age></age>
    	<sex>M</sex>
    	<unspec/>
    	<ricor>
    		<test><toast/><toaster/></test>	</ricor>
    	<test xsi:type="dmnd:Prot">
    		<toaster/>
    	</test>
    </person>
    

    Ottengo questo output:
    <person>
       <name>mickey mouse</name>
       <sex>M</sex>
       <test type="dmnd:Prot"/>
    </person>
    


    Questo è il sorgente dell'xsl:
    <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:element name="{local-name()}">
    			<xsl:apply-templates select="@*|node()" />
    		</xsl:element>
    	</xsl:template>
    	
    	<xsl:template match="@*">
    		<xsl:attribute name="{local-name()}">
    	      <xsl:value-of select="." />
    	    </xsl:attribute>
    	</xsl:template>
    	
    	<xsl:template match="text()">
    		<xsl:value-of select="normalize-space(.)" />
    	</xsl:template>
    	
    	<xsl:template match="*[not(descendant-or-self::*[text()[normalize-space()] | @*])]" />
    
    </xsl:stylesheet>
    
    Young professional woman and busy mom.
<softv>

Pagina generata in 96 millisecondi

Utenti attivi: 12 nell'ultimo minuto, 25 negli ultimi cinque minuti, 62 negli ultimi 15 minuti