2012-02-24 8 views

risposta

6

Utilizzare il test del nodo processing-instruction().

+1

Kirill, questa risposta è troppo generica - non si sta fornendo un'espressione XPath specifica che seleziona esattamente il PI ricercato. –

5

In generale, è possibile selezionare un'istruzione di elaborazione utilizzando il test del nodo processing-instruction().

In particolare, è possibile includere come argomento il nome (destinazione) del nodo PI ricercato.

Uso:

/processing-instruction('xml-stylesheet') 

Questo seleziona qualsiasi istruzione di elaborazione con il nome xsl-stylesheet definito a livello globale (è pari livello dell'elemento superiore).

Si noti che xsl:stylesheet è un target PI non valido per un PI. Un colon ':' viene utilizzato per delimitare un prefisso dello spazio dei nomi dal nome locale, tuttavia un'istruzione di elaborazione target non può appartenere a uno spazio dei nomi. Come per la W3c XPath Specification:

"Un'istruzione di elaborazione ha un nome espanso: la parte locale è l'obiettivo della istruzione di elaborazione, il namespace URI è nullo."

Sempre secondo il documento W3C: "Associating Style Sheets with XML documents 1.0", l'obiettivo della PI che associa un foglio di stile a un documento XML deve essere:. "xml-stylesheet" - non "xsl:stylesheet" o "xsl-stylesheet"

Ecco un esempio completo:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:template match="/"> 
    <xsl:copy-of select="/processing-instruction('xml-stylesheet')"/> 
</xsl:template> 
</xsl:stylesheet> 

Quando questa trasformazione viene applicata contro il seguente documento XML:

<?xml-stylesheet type="text/xsl" href="test"?> 
<Books> 
    <Book name="MyBook" /> 
</Books> 

l'espressione XPath viene valutata e il nodo PI selezionato viene emesso:

<?xml-stylesheet type="text/xsl" href="test"?> 
+11

Vedo che sei ancora all'altezza dei tuoi vecchi trucchi ... Eliminare e ripubblicare una risposta per scartare i voti è un abuso diretto: come la gente decide di valutare le tue risposte è la loro decisione, non la tua. Per favore, evita di farlo di nuovo. – Shog9

+0

'/ processing-instruction ('xml-stylesheet')' seleziona le cose con il nome 'xsl-stylesheet'? Sarebbe magico! Nota 'xml' vs' xsl'. –

+0

@MicheldeRuiter, Sì, lo fa. Questo è formalmente definito qui (il terzo paragrafo dal basso): http://www.w3.org/TR/xpath/#node-tests –

0

Un cappello istruzione di elaborazione due parti bersaglio e dati con la sintassi:

<?target data?> 

Se si utilizza:

<xsl:value-of select="/processing-instruction('xml-stylesheet')" /> 

verrà restituito solo la parte dei dati, nell'esempio di Dimitre Novatchev, restituisce:

type="text/xsl" href="test" 

Quindi il valore di stringa di un'istruzione di elaborazione è la parte dei dati. selezionare l'espressione di <xsl:value-of viene valutata e l'oggetto risultante viene convertito in una stringa, come una chiamata implicita alla funzione string().

Problemi correlati