vorrei rimuovere i tag che contengono solo caratteri spazi/a capo/tab, come di seguito:XPath/XSLT rimuovere i tag vuoti
<p> </p>
Come si dovrebbe fare questo usando le funzioni di XPath e modelli XSLT?
vorrei rimuovere i tag che contengono solo caratteri spazi/a capo/tab, come di seguito:XPath/XSLT rimuovere i tag vuoti
<p> </p>
Come si dovrebbe fare questo usando le funzioni di XPath e modelli XSLT?
Questa trasformazione (sovrascrivendo il identity rule):
<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="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[not(*) and not(text()[normalize-space()])]"/>
</xsl:stylesheet>
quando applicato al seguente documento XML:
<t>
<a>
<b>
<c/>
</b>
</a>
<p></p>
<p> </p>
<p>Text</p>
</t>
produce correttamente il risultato voluto:
<t>
<a>
<b/>
</a>
<p>Text</p>
</t>
Ricorda: l'utilizzo e l'override della regola di identità/modello è il modello di progettazione XSLT più fondamentale e potente. E 'la scelta giusta per una serie di problemi in cui la maggior parte dei nodi devono essere copiati invariato e solo alcuni nodi specifici devono essere alterati, cancellati, rinominati, ..., ecc
Nota: @Abel in il suo commento raccomanda che alcuni pezzi di questa soluzione devono essere ulteriormente spiegato:
per i non iniziati o curiose:
not(*)
mezzi: non avere un figlio elemento;not(text()[normalize-space()])
significa: non disporre di un nodo di testo con testo non solo bianco.
Per i non iniziati o curiosi: 'non (*)' significa: non avere un elemento figlio; 'not (text() [normalize-space()])' significa: non ha un nodo di testo con testo. – Abel
@Abel: Grazie, lo spiegherò nella risposta. –
È grandioso, grazie Dimitre. Sono ancora un po 'un principiante con XSLT e continuo a scoprire cose come questa che mi fanno impazzire. Penso di aver bisogno di trovare un buon libro. Grazie ancora per la fantastica spiegazione, SO ha bisogno di più di questo. – Kyle
Buona domanda, +1. È possibile produrre correttamente il risultato desiderato utilizzando il modello di progettazione XSLT più fondamentale e potente, ignorando la regola dell'identità. –