Реализация условия в XPath

У меня есть файл XML

<?xml version="1.0" encoding="UTF-8"?>
<xml>
  <events date="12/12/2010">
    <event>
      <title>JqueryEvent</title>
      <description>
        easily
      </description>
    </event>
  </events>
  <events date="14/12/2011">
    <event>
      <title>automatically onBlur</title>
      <description>
        when a date is selected. For an inline calendar, simply attach the datepicker to a div or span.
      </description>
    </event>
  </events>
</xml>

И я использую этот Xpath для выбора узлов

$xml   = simplexml_load_file($file);
$nodes = $xml->xpath('//xml/events');

Он выберет все узлы. Я хочу выбрать узлы на основе даты.

Ответ 1

Укажите дату в выражении xpath,

то есть.

$nodes = $xml->xpath('//xml/events[@date="14/12/2011"]');

выберет только последние события - node в примере

Ответ 2

Использование

$xml = simplexml_load_string($xml);
$nodes = $xml->xpath('//events[@date="14/12/2011"]');
print_r( $nodes );

чтобы получить событие node ниже xml node с указанной датой и

$xml = simplexml_load_string($xml);
$nodes = $xml->xpath('//xml/events[@date]');
print_r( $nodes );

чтобы получить все события ниже узлов xml node, имеющих атрибут даты. Аналогичным образом используйте

$xml = simplexml_load_string($xml);
$nodes = $xml->xpath('//events[contains(@date, "2011")]');
print_r( $nodes );

чтобы найти все узлы событий в любом месте документа с атрибутом даты, содержащим строку "2011".

На боковой панели вы можете использовать simplexml_load_file для загрузки файла XML напрямую.