PHP использует XPath 1.0. matches
- это функция XPath 2.0, поэтому вы бы увидели предупреждения в журнале ошибок, если бы искали их.
PHP Warning: DOMXPath::query(): xmlXPathCompOpEval: function matches not found in php shell code on line 1
PHP Stack trace:
PHP 1. {main}() php shell code:0
PHP 2. DOMXPath->query() php shell code:1
Простое совпадение с учетом регистра можно выполнить с помощью проверки равенства.
$title_text = "Farming";
$menu_query = "//a/li[. = '$title_text']";
Но поиск без учета регистра включает перевод символов из прописных в строчные:
$title_text = "FaRmInG";
$title_text = strtolower($title_text);
$menu_query = "//a/li[translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = '$title_text']";
В любом случае мы получаем NodeList, который можно перебрать:
$html = <<< HTML
<nav class="sidebar" aria-labelledby="primary-navigation">
<ul class="sidebar-list">
<!--each element has a sub-menu which is initially hidden by css when the page is loaded. Via php the appropriate path the current page and top-level links will be visible only-->
<a href="#"><li>Home</li></a>
<!--sub-items-->
<ul class="sub active">
<a href="#"><li>Barn</li></a>
<a href="#"><li>Activities</li></a>
<ul class="sub active">
<a href="#"><li>News</li></a>
<a href="#"><li>Movements</li></a>
<a href="#"><li>Reviews</li></a>
<a href="#"><li>About Us</li></a>
<a href="#"><li>Terms of Use</li></a>
</ul>
</ul>
<a href="#"><li>Events</li></a>
<ul class="sub">
<a href="#"><li>Overview</li></a>
<a href="#"><li>Farming</li></a>
<a href="#"><li>Practises</li></a>
<a href="#"><li>Links</li></a>
<ul class="sub">
<a href="#"><li>Another Farm</li></a>
<a href="#"><li>24m</li></a>
</ul>
</ul>
</ul>
</nav>
HTML;
$menu = new DOMDocument();
$menu->loadHTML($html);
$xpath = new DOMXPath($menu);
$elements = $xpath->query($menu_query);
foreach ($elements as $element) {
print_r($element);
}