【发布时间】:2011-12-16 04:32:37
【问题描述】:
我一直在回顾我所有的旧代码并尝试对其进行优化。我最近偶然发现并让我难过的事情是试图为此找到一个 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 字符串,它们看起来应该可以工作,但不能。他们通常引用preceding-children 并通过xpath() 函数对其进行计数,但我再也找不到原始来源,也不知道如何将其转换为 PHP xpath 字符串。
这甚至可能吗?或者它是否比我已经拥有的更好/更快/更有效率?建议/解决方案?
编辑:对于 Tandu 的解决方案
我的 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());
}
【问题讨论】: