2010-04-19 23 views
6

Necesito filtrar una expresión XPath para tomar solo un cierto atributo como no vacío.XPath filter no empty elemento hijo

yo probamos este:

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

y esto:

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

pero no funcionó. Necesito el mismo tipo de datos que regresan de la expresión XPath folloing ...

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

... pero filtradas para evitar elementos con @filename atributo vacía.

Gracias!

Respuesta

8

Dado que FileName es un elemento secundario y no un atributo, debe acceder a él como tal y no usar el calificador de atributo @ delante del nombre del nodo.

Probar:

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

Esto seleccionará los DocumentElement/QueryResults elementos que tienen un elemento FileName niño.

Si, sin embargo, siempre tiene un elemento FileName hijo (a veces vacía) y desea seleccionar los no vacíos, intente esto:

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

Os, lo siento, acabo de encontrar "FileName" isn't y el atributo, pero en realidad un nodo. ¿Cómo puedo verificar que no esté vacío? Gracias. –

+0

@Marcos - Eso explicaría los problemas que has tenido ... Respuesta actualizada (solo elimina el atributo calificador @). – Oded

+0

Gracias, no soy un especialista en XPATH y estaba teniendo problemas con el comportamiento extraño del software que estoy usando y el analizador sintáctico. Dado que los datos de origen se obtenían a través de una consulta SQL, le he aplicado una cláusula WHERE, en lugar de utilizar un filtro en la expresión XPATH. Gracias. –

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

Eso es sólo una conjetura rápida, y yo no he trabajado con XPath/XSLT en mucho tiempo. Aún así, si está vacío, entonces debería omitirlo. Aunque prefiero usar las funciones como string-length, no todos los UA los soportan (especialmente los analizadores XSLT del lado del cliente que apenas funcionan con XPath y XSLT 1.0, sin importar las funciones y funcionalidades útiles que proporcionan XSLT 2.0 y XPath).

+0

Gracias, tampoco soy un especialista en XPATH y estaba teniendo problemas con el comportamiento extraño del software que estoy usando y el analizador. Dado que los datos de origen se extrajeron a través de una consulta SQL, le he aplicado el filtro, en lugar de utilizar un filtro en la expresión XPATH. Gracias de cualquier manera. –

Cuestiones relacionadas