2010-09-07 7 views
0

J'ai un que je suis l'analyse du fichier xmll'analyse du fichier XML à l'aide XPath et 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> 

le fichier XML à l'aide

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

Il donnera seulement le titre et la description de la balise d'événement avec id spécifié .Comment je peux obtenir la date

Répondre

1

Essayez

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

En collaboration avec le XPath d'origine:

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

Merci KennyTM.Mais il donnera seulement la date. – Warrior

+0

@THOmas: Vous pouvez '' 'avec le XPath original. – kennytm

+0

désolé je n'ai pas eu vous.Pouvez-vous modifier votre réponse – Warrior

0

Une fois que vous avez trouvé l'élément <event> utiliser comme nœud de contexte pour une nouvelle requête XPath qui va chercher l'élément le plus proche <events> dans les ancestor -axis.

$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"; 
} 
Questions connexes