Я просматривал весь свой старый код и пытался его оптимизировать. Я недавно наткнулся на кое-что, что меня озадачило, - это попытка найти решение xpath для этого:
function findit($search) {
$i=0;
foreach($xml as $page) { //loop to find specific $element based on $attribute
if($page['src']==$search) { return $i; }
$i++;
}
}
Необходимо вернуть $ i
, чтобы его можно было использовать для ссылки на элемент в XML позже .
Похоже, это должно быть возможно, и я нашел несколько строк xpath, которые, похоже, должны работать, но не работают. Обычно они ссылаются на previous-children
и подсчитывают их с помощью функции xpath ()
, но я больше не могу найти исходные источники и не знаю, как перевести это на PHP строка xpath.
Возможно ли это вообще? Или это лучше / быстрее / эффективнее, чем то, что у меня уже есть? Предложения / решения?
РЕДАКТИРОВАТЬ: для решения Танду
Пример моего XML-файла
<range>
<page src="attribute1" />
<page src="attribute2" />
etc...
<page src="attribut20" />
</range>
В моей текущей функции PHP $ i
всегда возвращает 0
, но должен возвращать все, что позиция $ search
находится по адресу. Отредактировано, поэтому больше не нужно преобразовывать 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());
}