2013-03-18 1 views
2

Пытается получить все значения URL из xml.простой запрос xpath, но нет результатов

У меня есть сотни 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

Возможно, ваш запрос вернет нужные элементы, но по умолчанию предоставит вам содержимое тега мультимедиа (который в вашем случае пуст, так как тег самозакрывается).

Чтобы получить атрибут 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

Значение


Значение атрибута

+0

Спасибо. Теперь это работает. Я удалил это '' Когда я удалил эту xmlns = somepage. Это сработало. Раньше не было выхода. – Patrick

+2

Или используйте '' // root/entries/entry/media/@ url'' в качестве XPath, чтобы напрямую получить узлы 'DomAttr'. –

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

который даст вам все URL, как строки внутри $urls массива. Если при загрузке XML-файла произошла ошибка, массив пуст.