2010-09-07 3 views
0

У меня есть XML-файлСинтаксического файл XML с помощью XPath и XQuery

<?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.'"]'); 
} 

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

ответ

1

Попробуйте

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

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

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

Thanks KennyTM.But это даст только дату. – Warrior

+0

@THOmas: Вы можете '' 'с оригинальным XPath. – kennytm

+0

Извините, я не получил u.Can u edit ur answer – Warrior

0

После того, как вы нашли <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"; 
} 
Смежные вопросы