Разбор XML-файла с использованием xpath и xquery - PullRequest
0 голосов
/ 07 сентября 2010

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

<?xml version="1.0" encoding="UTF-8"?>
<xml>
<settings>
<title>Calendar for September</title>
<subTitle>Calendar for September  Calendar for September</subTitle>
</settings>
<events date="06-09-2010">
<event id="2">
<title>This is My Second Event</title>
<description>This is My Second Event </description>
</event>
<event id="3"><title>This is My Third  Event </title><description>This is My Third  Event This is My Third  Event This is My Third  Event </description></event></events>
</xml>

Я анализирую xml-файл, используя

$xml_str = file_get_contents('xmlfile');
$xml = simplexml_load_string($xml_str);
if(!empty($xml))
{
 $nodes = $xml->xpath('//xml/events/event[@id="'.$id.'"]');
}

Это даст только заголовок и описание тега события с указанным идентификатором. Как яможно получить дату

Ответы [ 2 ]

1 голос
/ 07 сентября 2010

Попробуйте

//event[@id="2"]/parent::events/@date

Вместе с оригинальным XPath:

//event[@id="2"]/parent::events/@date | //event[@id="2"]
0 голосов
/ 07 сентября 2010

Найдя элемент <event>, используйте его в качестве узла контекста для нового запроса xpath, который выбирает ближайший элемент <events> в оси ancestor.

$id = 2;
$xml = simplexml_load_file('xmlfile');
if( !$xml ) {
  echo '!xml doc';
}
else if ( !($event=$xml->xpath('events/event[@id="'.$id.'"]')) ) {
  echo '!event[id=...';
}
else if ( !($container = $event[0]->xpath('ancestor::events[1]')) ) {
  echo '!events parent';
}
else {
  echo $container[0]['date'], ' - ', $event[0]->title, "\n";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...