<ExternalPage about="http://www.awn.com/">
<d:Title>Animation World Network</d:Title>
<d:Description>Provides information resources to the international animation community. Features include searchable database archives, monthly magazine, web animation guide, the Animation Village, discussion forums and other useful resources.</d:Description>
<priority>1</priority>
<topic>Top/Arts/Animation</topic>
</ExternalPage>
<ExternalPage about="http://animation.about.com/">
<d:Title>About.com: Animation Guide</d:Title>
<d:Description>Keep up with developments in online animation for all skill levels. Download tools, and seek inspiration from online work.</d:Description>
<topic>Top/Arts/Animation</topic>
</ExternalPage>
$xml = simplexml_load_file("data.xml");
for($i = 0; count($xml->ExternalPage) > $i; $i++)
{
echo $xml->ExternalPage[$i]['about'];
echo '<br/>';
}
Спасибо за подсказку про счетчик. Реально он много времени жрет при этом. Спасибо. а про XPath побежал почитаю. Спс еще разDareczek
Как минимум убрать вызов на каждый проход count
$size = count($xml->ExternalPage);
for($i = 0; $size > $i; $i++){}
Еще я не уверен, но мне кажется можно получить выборку XPath'ом и пройтись по ней, а не через цикл
Проверил на сколько сократилось... С 37секунд запроса на 11сек. Реально круто )).Спасибо за подсказку про счетчик. Реально он много времени жрет при этом. Спасибо. а про XPath побежал почитаю. Спс еще раз
это после count, или xpath?Проверил на сколько сократилось... С 37секунд запроса на 11сек. Реально круто )).
после count, а про xpath я пока нечего не понял, читаю ещеэто после count, или xpath?
Почитал еще более про это в справочнике, и то что вы выше написали должно работать, и еще как. Но у меня показывает пусотй массив. Т.е array(0) { } . Перепробовал разные пути, но все ровно массив пустой )). вот такой примерно xmlЯ сам им никогда не пользовался, просто знаю что это выборка по xml-дереву.. Вроде для вашего случая это будет как-то так:
PHP:$res = $xml->xpath('/ExternalPage/about/');
<?xml version="1.0" encoding="UTF-8"?>
<RDF xmlns:r="http://www.w3.org/TR/RDF/" xmlns:d="http://purl.org/dc/elements/1.0/" xmlns="http://dmoz.org/rdf/">
<Topic r:id="">
<catid>1</catid>
</Topic>
<Topic r:id="Top/Arts">
<catid>381773</catid>
</Topic>
<Topic r:id="Top/Arts/Animation">
<catid>423945</catid>
<link1 r:resource="http://www.awn.com/"></link1>
<link r:resource="http://animation.about.com/"></link>
<link r:resource="http://www.toonhound.com/"></link>
<link r:resource="http://enculturation.gmu.edu/2_1/pisters.html"></link>
<link r:resource="http://www.digitalmediafx.com/Features/animationhistory.html"></link>
<link r:resource="http://www.spark-online.com/august00/media/romano.html"></link>
<link r:resource="http://www.animated-divots.net/"></link>
</Topic>
<ExternalPage about="http://www.awn.com/">
<d:Title>Animation World Network</d:Title>
<d:Description>Provides information resources to the international animation community. Features include searchable database archives, monthly magazine, web animation guide, the Animation Village, discussion forums and other useful resources.</d:Description>
<priority>1</priority>
<topic>Top/Arts/Animation</topic>
</ExternalPage>
$xml->xpath('/RDF/ExternalPage')
а тогда как к ним можно сделать такую же фичу? Ну я про $xml->xpath() Извините если туплюDareczek
Да, у вас в xml-ке используются неймспейсы
Я здесь даю лишь пару строчек, так как селый xml файл занимет 2 гига)) там почти 15милиардов строк ). Нужно както сделать парсер, который вытянет ссылки. Уже какбы и сделал, но он грузит веками, и то незагружает так как некоторые функции не загружают 2ГБ файлов. А про 2 лекции с ШРИ по xml и xpath уже пошел смотреть. Спс за помощь.Dareczek
Вы обрезаете ноды, я не могу загрузить вашу строчку. У вас на вход идет умный xml, его точно xpath будет разбирать быстрее, посмотрите 2 лекции с ШРИ по xml и xpath
http://events.yandex.ru/events/shri/msk-2012/talks/555/
http://events.yandex.ru/events/shri/msk-2012/talks/556/
function startElemHandler($parser, $name, $attribs) {
if (strcasecmp($name, "ExternalPage") == 0) {
foreach($attribs as $key => $val){
if (strcasecmp($key, "about") == 0) {
echo $name. " ".$key." = ".$val;
}
}
}
}
function endElemHandler($parser, $name) {}
// создаем парсер
$parser = xml_parser_create();
xml_set_element_handler($parser, startElemHandler, endElemHandler);
// читаем файл порциями и парсим
$fh = fopen($xml_file, "r");
while (!feof($fh)) {
$data = fread($fh, 4096);
xml_parse($parser, $data, feof($fh));
}
// для теста
//xml_parse($parser, '<xml>......</xml>');
xml_parser_free($parser);