2009-09-02 9 views
7

Ho alcuni elementi di elaborazione-Avviso di dentro la mia contenuto XML, ad esempio:Come abbinare l'elemento dell'istruzione di elaborazione in XSLT?

<?legalnoticestart?> 
<?sourcenotestart?> 
<para>Content para</para> 
<?sourcenoteend?> 
<?literallayoutstart?> 
<para>body content </para> 
<?literallayoutend?> 
<?legalnoticeend?> 

Come posso abbinare questi elementi e ottenere il contenuto nel formato elemento sotto richiesta?

richiesto xml:

<legalnotice> 
<sourcenote> 
<p>Content para</p> 
</sourcenote> 
<literallayout> 
<p>body content</p> 
</literallayout> 
</legalnotice> 

consiglio per favore ....

migliori saluti, Antony

risposta

17

Per impostazione predefinita, un processore XSLT ignorerà PI - per abbinarli al fine di fare cose divertenti e utili, è possibile utilizzare la corrispondenza elaborazione elaborazione nel modello:

<xsl:template match="processing-instruction('legalnoticestart')"> 
    <legalnotice><xsl:value-of select="."/></legalnotice> 
</xsl:template> 

Ad esempio, il seguente foglio di stile:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="doc"> 
     <xsl:apply-templates select="processing-instruction('legalnoticestart')" /> 
    </xsl:template> 

    <xsl:template match="processing-instruction('legalnoticestart')"> 
     <legalnotice><xsl:value-of select="."/></legalnotice> 
    </xsl:template> 
</xsl:stylesheet> 

Con questo documento:

<doc> 
    <?legalnoticestart?> 
    <?legalnoticeend?> 
</doc> 

Resa:

<?xml version="1.0"?> 
<legalnotice> 
</legalnotice> 
+0

Scusa, non funziona, sto solo ricevendo il contenuto senza alcun elemento. – Antony

+0

ciao, non ricevo il contenuto quando uso il tuo secondo codice ... ricevo solo questo elemento ... – Antony

+1

Quindi funziona, quindi! Il mio codice era solo uno snippet per dimostrare come andresti su questo. – butterchicken

2

Questo è di per sé una cattiva progettazione, ti sembra di essere cercare per abbinare i tag di inizio/fine ma senza utilizzare i metodi disponibili se si dovesse utilizzare un elemento xml effettivo.

Mentre è possibile associare le istruzioni di elaborazione di inizio/fine è difficile con xpath individuare i nodi tra le istruzioni di elaborazione. Se hai annidato o ripetuto tali istruzioni può diventare ancora più difficile. E alla fine della giornata, tutto ciò che sta facendo è provare a replicare ciò che xml già fa senza usare xml?