2013-02-28 2 views
0

Я искал HTML-код для "myfunc". Однако капитализация неясна. К сожалению, PHP работает с XPath 1, поэтому все поисковые запросы чувствительны к регистру.case-insensitive search in xpath 1

Как я могу обновить следующий код для поиска «myfunc», «MyFunc», «myFunc» и т. Д.?

foreach($domxpath->query('//*[@*[contains(.,"myfunc")]]') as $node) { 

Следующие не работают. Я также не предпринял попытку реализовать a translate() work-around.

foreach($domxpath->query('//*[@*[matches(.,"[mM][yY][fF][uU][nN][cC]")]]') as $node) { 

Если регулярное выражение не представляется возможным, как я мог бы найти на массив строк (т.е. "MyFunc", "MyFunc", "MyFunc" и т.д.)?

ответ

3

матчей является функцией XPath 2, в XPath 1 вы должны использовать перевод, чтобы преобразовать его в нормализованное случае:

//*[@*[contains(translate(., "MYFUNC", "myfunc"),"myfunc")]] 
0

Используйте case-insentitive option для матчей:

foreach($domxpath->query('//*[@*[matches(.,"myfunc","i")]]') as $node) { 

Для сравнения последовательности значений, просто использовать = сделать набор узлов сравнения:

(. = ("myfunc", "MyFunc", "myFunc")) 

возвращает истину, если что-нибудь в левой последовательности все в правой последовательности. От XPath spec:

Если оба сравниваемых объекта являются наборами узлов, то сравнение будет справедливо тогда и только тогда, когда есть узел в первом наборе узлов и узел во втором наборе узлов, таких что результат выполнения сравнения по строковым значениям этих двух узлов является истинным.