将xPath用于sitemap.xml

时间:2014-05-21 12:38:58

标签: php xml xpath 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 个答案:

答案 0 :(得分:3)

使用DOMXPath::registerNamespace

注册命名空间
$xpath->registerNamespace("s",
        "http://www.sitemaps.org/schemas/sitemap/0.9");

然后在XPath中使用它:

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

答案 1 :(得分:3)

这是因为命名空间。这是你可以忽略名称空间的方式:

Xpath 1.0:

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

Xpath 2.0:

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