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

Trying to get all URLs values from xml.

I have hundreds of entry exactly in the form like e.g. this 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>

I am using this code but cannot get it to work. Why?

$doc = new DOMDocument;

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

$xpath = new DOMXPath($doc);

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

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

What is the correc query for that? Best would be to only get the url value.

Your query probably returns the proper elements, but by default gives you the content of the media tag ( which in your case are empty, since the tag is self-closing ).

To get the url attribute of the tag you should use getAttribute(), example :

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

Or you should just xpath-query the attribute instead and read out it's value:

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

See DOMAttr::$valueDocs:

value


The value of the attribute

I would do that with SimpleXML actually:

$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));
}

Which will give you all URLs as strings inside the $urls array. If there was an error loading the XML file, the array is empty.