vistas transitorio modelo estructura diccionario datos campos calculados php xpath

transitorio - PHP XPath seleccionando el último elemento coincidente



modelo transitorio odoo (2)

Posibles duplicados:
PHP SimpleXML. ¿Cómo obtener el último artículo?
XSLT Selecciona todos los nodos que contienen una subcadena específica

Necesito encontrar el contenido del último elemento span con una clase de ''myClass''. He intentado varias combinaciones pero no puedo encontrar la respuesta.

//span[@class=''myPrice'' and position()=last()]

Esto devuelve todos los elementos con la clase ''myClass'', supongo que esto se debe a que cada elemento encontrado es el último en el momento del procesamiento, pero solo necesito el último elemento coincidente real.


La expresión que utilizó significa "seleccionar cada elemento span siempre que (a) tenga @class=''myprice'' , y (b) sea el último elemento secundario de su elemento principal. Hay dos errores:

(1) necesita aplicar el filtro [position()=last()] después de filtrar por @class, en lugar de aplicarlo a todos los elementos de span

(2) una expresión de la forma //span[last()] means /descendant-or-self::*/(child::span[last()]) que selecciona el último espacio de cada elemento. Debe usar paréntesis para cambiar la precedencia: (//span)[last()] .

De modo que la expresión se convierte en (//span[@class=''myPrice''])[last()] dada por VolkerK.


//span[@class=''myPrice''] marcar para el procesador que desea tratar //span[@class=''myPrice''] como el conjunto actual y luego aplicar la posición del predicado () = last () a ese conjunto.

(//span[@class=''myPrice''])[last()]

p.ej

<?php $doc = getDoc(); $xpath = new DOMXPath($doc); foreach( $xpath->query("(//span[@class=''myPrice''])[last()]") as $n ) { echo $n->nodeValue, "/n"; } function getDoc() { $doc = new DOMDOcument; $doc->loadxml( <<< eox <foo> <span class="myPrice">1</span> <span class="yourPrice">0</span> <bar> <span class="myPrice">4</span> <span class="yourPrice">99</span> </bar> <bar> <span class="myPrice">9</span> </bar> </foo> eox ); return $doc; }