He estado revisando todo mi código anterior y tratando de optimizarlo. Algo Hace poco se topó con y que ha conseguido me difuminados está tratando de encontrar una solución para este XPath:Encontrar elemento específico basado en un atributo
function findit($search) {
$i=0;
foreach($xml as $page) { //loop to find specific $element based on $attribute
if($page['src']==$search) { return $i; }
$i++;
}
}
necesita volver $i
para que pueda ser utilizado como referencia al elemento en el XML más adelante.
Parece que debería ser posible, y he encontrado algunas cadenas de xpath que parecen que deberían funcionar, pero no es así. Por lo general, se refieren al preceding-children
y los cuentan a través de la función xpath()
, pero ya no puedo encontrar las fuentes originales y no sé cómo traducir eso a una cadena PHP xpath.
¿Esto es posible? ¿O es mejor/más rápido/eficiente que lo que ya tengo? Sugerencias/Soluciones?
EDIT: Para la solución
Ejemplo de mi XML del archivo Tandu
<range>
<page src="attribute1" />
<page src="attribute2" />
etc...
<page src="attribut20" />
</range>
En mi función actual de PHP, $i
siempre devuelve 0
pero debe regresar cualquier posición $search
se encuentra en. Editado por lo que ya no necesita convertir simplexml.
function findit($search) {
$dom=new DOMDocument('1.0');
$dom->load($file);
$xpath=new DOMXPath($dom);
$i=$xpath->evaluate("count(/range/page[@src='$search']/preceding-sibling::*)");
die($dom->saveXML());
}
estado usando simplexml durante tanto tiempo me había olvidado de su hermano mayor dom! – mseancole
* No me di cuenta de que ingresar agregaría comentarios en lugar de pasar a la siguiente línea XD Mi XML es, por supuesto, simplexml. Esto es lo que tengo, no estoy seguro si es la manera más elegante, pero aún no puedo hacer que funcione :( Agregué el código en la publicación original porque no pude formatearlo aquí correctamente :( – mseancole
@showerhead puedo vea su xml? Tenga en cuenta que "raíz" y "hijo" son los nombres de los nodos.Por ejemplo, si tiene ' ' en su lugar, reemplazaría "raíz" por "padre" y "hijo" por "hijo" en mi ejemplo. Veo que estás usando "niño" en el ejemplo de tu pregunta. –