2014-05-21 18 views
0

這裏使用XPath是XML文件內容:爲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> 

這裏而來的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/>"; 
?> 

此代碼不能正常工作。但是如果我從文件中刪除xmlns="http://www.sitemaps.org/schemas/sitemap/0.9",它就可以工作。爲什麼這樣?謝謝!

回答

2

註冊使用DOMXPath::registerNamespace

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

然後在你的XPath使用它的命名空間:

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

這是因爲命名空間的。下面是忽略名字空間的方式,你可以做到這一點:

的XPath 1.0:

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

的XPath 2.0:

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