2011-01-31 3 views
0

Я пытаюсь использовать xml-файл и извлекать из него все ссылки. до сих пор у меня есть:xml problem with php

$xmlHeadline = $xml->channel[0]->item[3]->link; 
print($xmlHeadline); 

Это работает нормально, чтобы напечатать ссылку одного заголовка для item[3] в XML. Но, как вы можете видеть, это 2 уровня глубины. Затем следующий будет на channel[0]->item[4]->link. Нет канала 1, только channel[0].

Все примеры в Интернете касаются только уровня 1 уровня. Все они использовали цикл foreach, но я не уверен, что это можно использовать здесь ...

Как я могу перебирать все элементы в xml и эхо всех ссылок?

ответ

0

Попробуйте

foreach ($xml->channel[0]->item as $item) { 
    echo $item->link; 
} 

или

foreach ($xml->xpath('/channel/item/link') as $link) { 
    echo $link; 
} 
0

Я думаю, вам нужен парсер DOM, который позволит вам загрузить xml в качестве структурированной иерархии, а затем использовать функцию, такую ​​как getElementByIdhttp://php.net/manual/en/domdocument.getelementbyid.php, для анализа XML-файла и получения конкретных элементов, которые вы хотите на любой глубине.

Если вы предоставили структуру xml-файла, я могу помочь с конкретным использованием функции DOM.

0
$str = '<channels><channel> 
<item><link>google.com</link></item> 
<item><link>google.com.cn</link></item> 
<item><link>google.com.sg</link></item> 
<item><link>google.com.my</link></item> 
</channel></channels>'; 
$xml = simplexml_load_string($str); 
$objs = $xml->xpath('//channel/item/link'); 

PS: Пожалуйста, включите некоторый пример вашего XML