2010-04-19 21 views
6

Devo filtrare un'espressione XPath per afferrare solo un determinato attributo come non vuoto.Filtro XPath non vuoto elemento figlio

ho provato questo:

<xsl:template match="DocumentElement/QueryResults[string(@FileName)]"> 

e questo:

<xsl:template match="DocumentElement/QueryResults[string-length(@FileName)>0]"> 

ma non ha funzionato. Ho bisogno lo stesso tipo di dati di ritorno dalla espressione folloing XPath ...

<xsl:template match="DocumentElement/QueryResults"> 

... ma filtrato per evitare oggetti con attributo @FileName vuoto.

Grazie!

risposta

8

Poiché FileName è un elemento figlio e non un attributo, è necessario accedervi come tale e non utilizzare il qualificatore di attributo @ davanti al nome del nodo.

Prova:

<xsl:template match="DocumentElement/QueryResults[FileName]"> 

Questo selezionerà i DocumentElement/QueryResults elementi che hanno un elemento FileName bambino.

Se, tuttavia, si ha sempre un elemento FileName bambino (a volte vuoto) e si desidera selezionare quelli non vuoti, provate questo:

<xsl:template match="DocumentElement/QueryResults[string-length(FileName) &gt; 0]"> 
+0

Os, mi dispiace, ho appena trovato "FileName" isn't e attributo, ma in realtà un nodo. Come posso verificare che non sia vuoto? Grazie. –

+0

@Marcos - Questo spiegherebbe i problemi che hai avuto ... Risposta aggiornata (basta rimuovere il qualificatore di attributo @). – Oded

+0

Grazie, non sono uno specialista di XPATH e stavo avendo problemi con lo strano comportamento del software che sto usando e con il parser. Poiché i dati di origine venivano trascinati attraverso una query SQL, ho applicato una clausola WHERE ad esso, invece di utilizzare un filtro nell'espressione XPATH. Grazie. –

3
<xsl:template match="DocumentElement/QueryResults[FileName != '']"> 

Questo è solo un rapido supposizione, e io Non ho lavorato con XPath/XSLT da molto tempo. Tuttavia, se è vuoto, dovrebbe saltarlo. Mentre preferisco usare le funzioni come string-length, non tutti gli UA supportano loro (in particolare i parser XSLT lato client che funzionano a fatica con XPath e XSLT 1.0, non importa le funzioni e le funzionalità utili fornite da XSLT 2.0 e XPath).

+0

Grazie, anch'io non sono uno specialista di XPATH e stavo avendo problemi con lo strano comportamento del software che sto usando e con il parser. Poiché i dati di origine venivano trascinati attraverso una query SQL, ho applicato il filtro su di esso, invece di utilizzare un filtro nell'espressione XPATH. Grazie comunque. –

Problemi correlati