Perché XSLT genera tutto il testo per impostazione predefinita?

Salve, ho eseguito una trasformazione che elimina un tag se è nullo.

Volevo verificare se la mia trasformazione funzionava correttamente, quindi, invece di controllarlo manualmente, ho scritto un altro codice XSLT che controlla la presenza di quel particolare tag nell’output XML, se è nullo, quindi il secondo XSLT dovrebbe generare un testo “TROVATO”. (In realtà non ho bisogno di qualche tipo di output XML, ma sto solo usando XSLT per la ricerca.)

Quando ho provato con questo codice XSL ::

  FOUND   

Emette tutti i DATI TESTI presenti nel file XML,

per evitare ciò, ho dovuto scrivere questo codice ::

   FOUND    

perché il codice precedente ha generato TEXT, perché dovrei insistere con XSL per ignorare tutti gli altri testi? è che il comportamento di tutti i parser XML o solo dei miei (sto usando parser msxml).

perché il codice precedente ha generato TEXT, perché dovrei insistere con XSL per ignorare tutti gli altri testi? è il comportamento di tutti i parser XML o solo dei miei

Stai scoprendo una delle funzionalità XSLT più fondamentali, come specificato nella specifica: i modelli incorporati di XSLT .

Dalla specifica :

Esiste una regola modello incorporata per consentire all’elaborazione ricorsiva di continuare in assenza di una corrispondenza del modello corretta da parte di una regola modello esplicita nel foglio di stile. Questa regola del modello si applica a entrambi i nodes elemento e al nodo radice. Quanto segue mostra l’equivalente della regola del modello incorporato:

    

Esiste anche una regola di modello incorporata per ciascuna modalità, che consente all’elaborazione ricorsiva di continuare nella stessa modalità in assenza di una corrispondenza di modello corretta da parte di una regola modello esplicita nel foglio di stile. Questa regola del modello si applica a entrambi i nodes elemento e al nodo radice. Quanto segue mostra l’equivalente della regola del modello incorporato per la modalità m.

    

Esiste anche una regola modello incorporata per i nodes di testo e attributo che copia il testo attraverso:

    

La regola di template incorporata per elaborare istruzioni e commenti è di non fare nulla.

  

Anche la regola modello incorporata per i nodes dello spazio dei nomi non deve fare nulla. Non esiste uno schema che possa corrispondere a un nodo dello spazio dei nomi; pertanto, la regola del modello incorporato è l’unica regola del modello applicata per i nodes dello spazio dei nomi.

Le regole del modello incorporato vengono trattate come se fossero state importate implicitamente prima del foglio di stile e quindi hanno una precedenza di importazione inferiore rispetto a tutte le altre regole del modello. Pertanto, l’autore può sovrascrivere una regola del modello incorporata includendo una regola del modello esplicita.

Quindi, il comportamento riportato è il risultato dell’applicazione dei modelli incorporati – il 1 ° e il 2 ° di tutti e tre.

È un buon modello di progettazione XSLT per sovrascrivere i modelli incorporati con i propri che emetteranno un messaggio di errore ogni volta che viene chiamato in modo che il programmatore sappia immediatamente che la sua trasformazione sta “perdendo”:

Ad esempio , se esiste questo documento XML:

   Don't want to see this   

e viene elaborato con questa trasformazione :

             

il risultato è :

  Don't want to see this  

e il programmatore sarà molto confuso su come è apparso il testo indesiderato.

Tuttavia, l’aggiunta di questo catch-all template consente di evitare qualsiasi confusione e di rilevare immediatamente gli errori :

    WARNING: Unmatched element:     

Ora, oltre all’output confuso, il programmatore riceve un avvertimento che spiega immediatamente il problema :

  WARNING: Unmatched element: c 

Esistono diverse regole del modello incorporate in XSL, una delle quali è questa:

    

Emette testo.