2012-08-02 111 views
37

tengo este código HTML:expresión XPath para eliminar los espacios en blanco

<tr class="even expanded first> 
    <td class="score-time status"> 
    <a href="/matches/2012/08/02/europe/uefa-cup/"> 

      16 : 00 

    </a> 
    </td>   
    </tr> 

que desea extraer los (16: 00) cadena sin espacios en blanco extra. es posible?

+3

Usando qué implementación - PHP, o qué? XPath se preocupa por la recuperación de nodos, no por el manejo de cadenas. Cualquier eliminación de espacios en blanco tendría que hacerse por separado * después * de la recuperación. – Utkanos

+0

Creo que hay una expresión para obtener el texto deseado sin espacios – adellam

+0

Si hablamos de php (que de alguna manera he supuesto ya que se trata de html), puede establecer preseveWhiteSpace en falso en su objeto DOMDocument, lo que resulta en el automático eliminación de espacio en blanco redundante. http://www.php.net/manual/de/class.domdocument.php#domdocument.props.preservewhitespace – inVader

Respuesta

-11

Obtenga el contenido interno de las etiquetas con xpath-expressen, luego use trim() (suponiendo que esté usando php) o alguna función equivalente para cortar cualquier espacio en blanco al principio o al final.

+0

puede publicar más detalles pls. – adellam

+4

menos 1 porque la pregunta es cómo hacerlo con XPath, no PHP ... – Borna

1
  • puede comprobar si los nodos de texto están vacíos.

    /path/text()[not(.= '')]

puede ser útil con los ejes como siguiente-sibling :: si estos no son recipientes, o con niño ::.

  • puede utilizar la función de XPath cadena() o la expresión regular() 2.

NOTA: algunos comentarios dicen que XPath no puede hacer la manipulación de cadenas ... incluso si no está realmente diseñado para ese puedes hacer cosas básicas: contains(), starts-with(), replace().

si desea verificar los nodos de espacio en blanco es mucho más difícil, ya que generalmente tendrá un conjunto de resultados de la lista de nodos, y la mayoría de las funciones de xpath, como coincidencia o reemplazo, solo operan un nodo.

  • se puede separar de nodo y la cadena de manipulación

Así que es posible utilizar XPath para recuperar un contenedor, o una lista de nodos de texto, y luego procesarlo con otra lengua. (java, php, python, perl por ejemplo).

90

I. Utilice esta expresión XPath sola:

translate(normalize-space(/tr/td/a), ' ', '') 

Explicación:

  1. normalize-space() produce una nueva cadena a partir de su argumento, en el que cualquier principio o al final blanco -space (espacio, tabulador, NL o caracteres CR) se elimina y cualquier espacio intermedio blanco se reemplaza por un espacio único personaje.

  2. translate() toma el resultado producido por normalize-space() y produce una nueva cadena en la que cada uno de los espacios intermedios restantes se sustituye por la cadena vacía.


II.Alternativamente:

translate(/tr/td/a, ' &#9;&#10;&#13', '') 
+1

funciona muy bien! Limpié rápidamente un campo en una plantilla de InfoPath que estaba construyendo. – Shrout1

+0

@ Shrout1, De nada. –

+0

¿Hay una expresión XPATH más corta para obtener solo los nodos CDATA a través de un archivo XML? –

9

Por favor, intente la siguiente expresión XPath:

En muchos casos también podemos utilizar la función XPath normalizar el espacio(), que desde su argumento de cadena produce otra cadena en la que los grupos de el espacio en blanco anterior y posterior se corta, y cada espacio en blanco dentro de la cadena se reemplaza por un espacio simple.

En el caso anterior, nos limitaremos a usar la siguiente expresión XPath:

/*/UN NIÑO [normalizar el espacio() = 'Hola Mundo']

Así,

// td [@ class = 'estado del puntaje']/a [normalize-space() = '16: 00 ']

+0

esta respuesta ayudó y fue la más directa para mí – Michal

Cuestiones relacionadas