Я создаю сайт Yahoo! Widget и делал это раньше без проблем (создание виджета). Я получаю xml-документ через веб-ссылку и хочу, чтобы все узлы входили в дерево. Я делаю это:
var request = new XMLHttpRequest();
request.open( "GET", url, false );
request.send();
if ( request.status == 200 )
{
doc = request.responseXML;
tree = doc.evaluate("/lfm");
status = tree.item(0).getAttribute("status")
if(status == "ok")
{
print ("status is ok!");
tracks = doc.evaluate("/lfm/recenttracks[1]/track");
for(i=0;i<tracks.length;i++)
{
artist = tracks.item(i).firstChild.firstChild.data;
}
}
}
}
Таким образом вы можете вывести узел artist из дерева. однако есть проблема, если вы хотите иметь следующего родного брата. Вы должны позвонить
tracks.item(i).firstChild.nextSibling.firstChild.data;
tracks.item(i).firstChild.nextSibling.nextSibling.firstChild.data;
tracks.item(i).firstChild.nextSibling.nextSibling.nextSibling.firstChild.data;
чтобы сделать это. Узел рядом с этим добавляет к нему 'nextsibling' и так далее. Я не хочу продолжать добавлять эти узлы и подумал, что можно будет использовать childNodes[i] следующим образом:
artist = tracks.item(i).childNodes[0].firstChild.data;
nextitem = tracks.item(i).childNodes[1].firstChild.data;
это не работает, хотя. он возвращает "childNodes[0] не имеет свойств" независимо от того, как я его использую. Теперь я думаю, что в Xpath есть способ сделать это в цикле for:
name = doc.evaluate("string(/lfm/recenttracks[1]/track["+i+"]/name)");
print(name);
othernode = doc.evaluate("string(/lfm/recenttracks[1]/track["+i+"]/album)");
print(othernode);
а затем увеличивая i для следующего трека. но каким-то образом это возвращает только один элемент. он не извлекает больше элементов в цикле for. i-1 тоже не работает.
Кто-нибудь знает, как использовать выражение Xpath с моим значением i, чтобы выбрать узел, а затем получить подузлы для каждого суперузла? Для каждой дорожки я хочу получить исполнителя, имя, возможность потоковой передачи, mbid, альбом, URL-адрес, изображение (маленькое), изображение (среднее), изображение (большое) и дата.
мой xml-файл выглядит так:
<lfm status="ok">
<recenttracks user="xaddict">
<track nowplaying="true">
<artist mbid="f5b8ea5f-c269-45dd-9936-1fedf3c56851">The Presets</artist>
<name>Girl (You Chew My Mind Up)</name>
<streamable>1</streamable>
<mbid></mbid>
<album mbid="b150d099-b0f3-4feb-9a05-34e693c6dd24">Beams</album>
<url>http://www.last.fm/music/The+Presets/_/Girl+%28You+Chew+My+Mind+Up%29</url>
<image size="small">http://userserve-ak.last.fm/serve/34s/8696437.jpg</image>
<image size="medium">http://userserve-ak.last.fm/serve/64s/8696437.jpg</image>
<image size="large">http://userserve-ak.last.fm/serve/126/8696437.jpg</image>
<date uts="1236440600">7 Mar 2009, 15:43</date>
</track>
<track >
<artist mbid="f5b8ea5f-c269-45dd-9936-1fedf3c56851">The Presets</artist>
<name>Get Outta Here</name>
<streamable>1</streamable>
<mbid></mbid>
<album mbid="0469956f-d895-4120-8ec5-29ad41b9e2fd">Blow Up</album>
<url>http://www.last.fm/music/The+Presets/_/Get+Outta+Here</url>
<image size="small">http://userserve-ak.last.fm/serve/34s/20923179.png</image>
<image size="medium">http://userserve-ak.last.fm/serve/64s/20923179.png</image>
<image size="large">http://userserve-ak.last.fm/serve/126/20923179.png</image>
<date uts="1236440242">7 Mar 2009, 15:37</date>
</track>
</recenttracks>
</lfm>