简单的xpath查询,但没有结果

时间:2013-03-18 17:39:11

标签: php xpath

尝试从xml获取所有URL值。

我有数百个entry完全符合例如此条目16

<?xml version="1.0" encoding="utf-8" ?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <entries>
   <entry id="16">
      <revision number="1" status="accepted" wordclass="v" nounclasses="" unverified="false"></revision>
      <media type="audio" url="http://website.com/file/65.mp3" />
      </entry>
   <entry id="17">
      ....
   </entry>
</entries>
</root>

我正在使用此代码,但无法使其正常工作。为什么呢?

$doc = new DOMDocument;

$doc->Load('data.xml');

$xpath = new DOMXPath($doc);

$query = '//root/entries/entry/media';

$entries = $xpath->query($query);

对此有什么相关问题?最好只获得url值。

2 个答案:

答案 0 :(得分:2)

您的查询可能会返回正确的元素,但默认情况下会为您提供媒体标记的内容(在您的情况下为空,因为标记是自动关闭的)。

要获取代码的url属性,您应该使用getAttribute(),例如:

$entries = $xpath->query('//root/entries/entry/media');
foreach($entries as $entry) { 
  print $entry->getAttribute("url")."<br/>";
}

或者你应该只是xpath查询属性,并读出它的值:

$urlAttributes = $xpath->query('//root/entries/entry/media/@url');
                                                          #####
foreach ($urlAttributes as $urlAttribute)
{ 
    echo $urlAttribute->value, "<br/>\n";
                        #####
}

请参阅DOMAttr::$valueDocs

  

     
     

属性的值

答案 1 :(得分:1)

我会用SimpleXML实际做到这一点:

$file  = 'data.xml';
$xpath = '//root/entries/entry/media/@url';

$xml  = simplexml_load_file($file);
$urls = array();

if ($xml) {
    $urls = array_map('strval', $xml->xpath($xpath));
}

这将在$urls数组中为您提供所有URL作为字符串。如果加载XML文件时出错,则该数组为空。