Pregunta

Tengo un XML como este

<root>
<el id="1" value="3"/>
<el id="2" value="3"/>
<el id="3" value="4"/>
<el id="4" value="4"/>
<el id="5" value="4"/>
<el id="6" value="4"/>
</root>

Me gustaría con una xpath (estoy en un c# contexto de una plantilla xslt) se obtiene el 2 primer elemento con un valor de 4 ie

<el id="3" value="4"/>
<el id="4" value="4"/>

con /root/el[position() <= 2 and @value=4] Me gustaría obtener 0 elemento debido a la posición() se basa en el nodo padre, y no el actual subconjunto.

Puedo hacer esto en c#, pero parece inútil carga de 1200 nodo cuando solo necesito 20.

Gracias

¿Fue útil?

Solución

Las siguientes obras para mí en una secuencia de comandos XSLT;

  <xsl:template match="/">
    <xsl:apply-templates select="/root/el[@value=4][position()&lt;=2]" />
  </xsl:template>

El resultado es id 3 y 4, por lo que el XPATH /root/el[@value=4][position()&lt;=2] debe trabajar para usted.

Otros consejos

La respuesta de @rsp es correcta, pero me gustaría agregar una explicación.No siempre es cierto que [cond1 and cond2] es equivalente a [cond1][cond2].Necesita el segundo formulario.

Tu expresión:

/root/el[position() <= 2 and @value=4]

... selecciona todos los elementos el que tienen un atributo value igual a 4 y cuya posición es menor o igual que 2.No hay tales elementos en su documento.

Quieres:

/root/el[@value=4][position() <= 2]

... que primero selecciona todos los elementos el que tienen un atributo value igual a 4 y luego filtra esa lista por posición, según se desee.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top