2014-05-21 5 views
0

Voici le contenu du fichier XML:Utilisation de XPath pour sitemap.xml

<?xml version="1.0" encoding="utf-8"?> 
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> 
<url id="first_url"> 
<loc>http://example.com</loc> 
<lastmod>2014-05-21</lastmod> 
</url> 
</urlset> 

Et va ici le code PHP:

<?php 
$dom = new DOMDocument('1.0', 'utf-8'); 
$dom->Load('sitemap.xml'); 
$xpath = new DOMXPath($dom);   
$tags = $xpath->query('//url[@id="first_url"]'); 
foreach($tags as $tag) 
    print $tag->getAttribute("id")."<br/>"; 
?> 

Ce code ne fonctionne pas. Mais si j'enlève xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" du fichier, cela fonctionne. Pourquoi c'est comme ça? Merci!

Répondre

2

l'espace de nom en utilisant DOMXPath::registerNamespace

$xpath->registerNamespace("s", 
     "http://www.sitemaps.org/schemas/sitemap/0.9"); 

Ensuite, utilisez dans votre XPath:

$tags = $xpath->query('//s:url[@id="first_url"]'); 
1

Il est à cause de l'espace de noms. Voici comme vous pouvez le faire qui ne tient pas compte de l'espace de nom:

XPath 1.0:

//*[local-name()="url"][@id="first_url"] 

XPath 2.0:

//*:url[@id="first_url"] 
Questions connexes