2010-08-12 8 views
17

estoy tratando de obtener las etiquetas que tienen un atributo que termina con una determinada identificación.
como <span id="ctl00_ContentPlaceHolder1_Country">
quiero conseguir los tramos que tienen el ID termina con 'País'
i tratar el siguiente XPath //span[ends-with(@id,'Country')] pero me da la siguiente excepción
"necesita Gestor de espacio de nombres o XsltContext. Esta consulta tiene un prefijo, variable, o función definida por el usuario ".problema al obtener la función xpath ends-with() funciona mientras contiene() funciona bien

lo extraño es que contiene funciona bien por lo que el siguiente XPath obras //span[contains(@id,'Country')]
cualquier idea por qué sucede esto? gracias

+0

Buena pregunta (1). Vea mi respuesta para una solución XPath 1.0 de una línea que implementa la función XPath 2.0 e'nds-with() '. :) –

Respuesta

29

La funciónends-with()no está definido para XPath 1.0pero sólo para XPath 2.0 y XQuery.

Usted está usando .NET. . NET en esta fecha no implementaXPath 2.0, XSLT 2.0 o XQuery.

uno puede construir fácilmente una expresión XPath 1.0, la evaluación de que produce el mismo resultado que la función ends-with():

$str2 = substring($str1, string-length($str1)- string-length($str2) +1)

produce el mismo resultado booleano (true() o false()) como :

ends-with($str1, $str2)

En el caso concreto sólo tiene que sustituir las expresiones correctas para $str1 y $str2. Son, en consecuencia, /myXml/data y 'World'.

Así, el XPath 1.0 expresión de usar, que es equivalente a la de XPath 2.0 expresión ends-with(/myXml/data, 'World') es:

'World' = 
    substring(/myXml/data, 
      string-length(/myXml/data) - string-length('World') +1 
      ) 
8

contiene() y starts-with() están en XSLT1; ends-with() está en XSLT2 solamente.

+0

gracias, pero ¿por qué el mensaje de error es tan estúpido? – Karim

+1

Tendrás que hablar con el desarrollador. ¿Qué implementación de transformador es esta? –

+5

Además, observe que 'fn: contains' no le dará los mismos resultados. Puede usar: 'span [subserie (@ id, string-length (@id) -6) = 'País']' –

1

Fecha: 6th Ene el año 2016

Para cualquier lectura de esta respuesta, éstos son las funciones Xpath String admitidas en el último framework .Net 4.6:

concat: Devuelve la concatenación de los argumentos.

contiene: Devuelve verdadero si la primera cadena de argumento contiene la segunda cadena de argumento; de lo contrario, devuelve falso.

normalize-space: Devuelve la cadena del argumento con el espacio en blanco despojado.

starts-with: Devuelve verdadero si la primera cadena de argumento comienza con la segunda cadena de argumento; de lo contrario, devuelve falso.

cadena: Convierte un objeto en una cadena.

cadena-longitud: Devuelve el número de caracteres en la cadena.

subcadena: Devuelve la subcadena del primer argumento de partida en la posición especificada en el segundo argumento y la longitud especificada en el tercer argumento.

substring-after: Devuelve la subcadena de la primera cadena de argumento que sigue a la primera aparición de la segunda cadena de argumento en la primera cadena de argumento.

substring-before: Devuelve la subcadena de la primera cadena de argumento que precede a la primera aparición de la segunda cadena de argumento en la primera cadena de argumento.

translate: Devuelve la primera cadena de argumento con apariciones de caracteres en la segunda cadena de argumento reemplazada por el carácter en la posición correspondiente en la tercera cadena de argumento.

MSDN Source

Cuestiones relacionadas