Domanda

Ho un problema particolare non sono sicuro di come affrontare. Qui in ufficio c'è questa grande XSLT ingombrante che abbiamo per adattare un tipo di XML ad un altro. Il problema è che non è molto coerente scritto e molto difficile da seguire. Nell'antica creazione di questo foglio di stile, a quanto pare è stato dimenticato esattamente quello che fa.

C'è un modo per tracciare facilmente in un formato leggibile esattamente ciò che fa il XSLT gigante? cioè Ogni eventuale input -> Ogni possibile uscita. Non possiamo creare un documento di input onnicomprensivo, dal momento che l'adattatore ha un comportamento diverso per l'input diverso (Stimiamo ci vorrebbero 100 + documenti di ingresso per coprire ogni possibile uscita)

Qualsiasi suggerimento sarebbe molto gradito.

È stato utile?

Soluzione

Break it up - spostare le dichiarazioni di esecuzione xsl ai modelli XSL all'interno del documento. In questo modo, si lavorerà fino a un più ragionevole comprensione del documento dall'alto verso il basso.

E se è così incredibilmente gigantesco per impedire di comprenderla, questo suona come voi avete una decisione ri-factoring davanti a voi: è questo documento così importante che abbiamo bisogno di sapere ciò che fa (e capire come funziona - richiedendo così un po 'di ri-lavoro), o possiamo vivere con esso così come sono?

Altri suggerimenti

Avete capito i documenti di ingresso?

Se sì saltare frase successiva altro No: -

Quindi non è possibile testare qualsiasi conseguente ri-fattore di XSLT, quindi, è necessario effettuare la risposta a questa domanda, Sì.

Avete capito documenti di output?

Se sì saltare frase successiva altro No: -

Quindi non è possibile testare qualsiasi conseguente ri-factor del XSLT, quindi, è necessario effettuare la risposta a questa quesion, Sì.

Ora che le risposte a entrambe le domande è sì, il fosso XSLT e costruire qualcosa che si può capire. Sai cosa l'ingresso è e si sa che cosa output desiderato, classico von-Newman (non ancora insegnano che in questi giorni?).

In generale questo è compito impossibile - per qualsiasi linguaggio di programmazione

Ciò deriva dal indecidibilità di il problema della terminazione .

Pertanto, puoi mettere un enorme sforzo nel cercare di fare qualcosa che ha dimostrato di essere impossibile.

La mia raccomandazione è quello di scrivere la propria soluzione , seguendo le migliori pratiche di programmazione, utilizzando test di unità e, se possibile, le prove di correttezza. XSLT come un linguaggio funzionale è più adatto per dimostrare la correttezza.

Questo non sta andando per aiutarvi con ogni probabilità. Ma io condividere la mia esperienza.

I trattavo me stesso XSLT solo ieri, quando ho avuto lo stesso problema cercando di capire che cosa la specifica XSLT stava dicendo w.r.t. parsing. Quello che ho fatto, per aiutare me stesso, era aggiungere un paio di funzioni (xsl: template di, per essere pedanti) al XSL originale. Successivamente, ho fatto funzionare attraverso il browser, e voilà, ho avuto un quadro chiaro del DFS.

ho creato il seguente:

<xsl:template name="print">
<xsl:param name="message"/>
<xsl:param name="elem"/>
<div class="ArticleBody">
  <br/>
  <xsl:value-of select="$message"/>: <xsl:value-of select="$elem"/> ... <br/>
</div>

                               

                               

Il modello print è il lavoratore e il prologo ed epilogo chiama semplicemente print con stringhe personalizzate.

E ho messo cambia il file XSL originale da:

<xsl:template match="db:para">
 <xsl:apply-templates/>
</xsl:template>

a:

<xsl:template match="db:para">
 <xsl:call-template name="prologue">
   <xsl:with-param name="item" select="'para'"/>
 </xsl:call-template>
 <xsl:apply-templates/>
 <xsl:call-template name="epilogue">
  <xsl:with-param name="item" select="'para'"/>
 </xsl:call-template>

Mi piacerebbe ora ottenere un output in cui ogni nodo è stato processato:

start-processing: article ... 

e quando ha completato

end-processing: article ...

ho buttato un po 'di CSS e (durante l'elaborazione del nodo radice) solo così le cose sembrano buone. E quel tipo di fatto il mio giorno :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top