Ich erstelle eine Yahoo! Widget und habe dies vorher ohne Probleme (Erstellen eines Widgets) getan. Ich bekomme ein XML-Dokument über einen Weblink und möchte alle Knoten intro einen Baum bekommen. Ich tue dies:Wie verwende ich Xpath in Yahoo! Widgets, um einen Baum zu überqueren?
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;
}
}
}
}
Auf diese Weise können Sie den Knoten Künstler aus demBaum erhalten. Es gibt jedoch ein Problem, wenn Sie die nächsten Geschwister haben wollen. Sie müssen
tracks.item(i).firstChild.nextSibling.firstChild.data;
tracks.item(i).firstChild.nextSibling.nextSibling.firstChild.data;
tracks.item(i).firstChild.nextSibling.nextSibling.nextSibling.firstChild.data;
aufrufen, um dies zu tun. Der Knoten daneben fügt 'nexsibling' hinzu und so weiter. Ich will nicht auf halten diese Knoten hinzugefügt und dachte, es wäre möglich, childnodes [i] wie folgt zu verwenden:
artist = tracks.item(i).childNodes[0].firstChild.data;
nextitem = tracks.item(i).childNodes[1].firstChild.data;
dies allerdings nicht funktioniert. es gibt zurück "childNodes [0] hat keine Eigenschaften" in welcher Art auch immer ich es verwende. Jetzt denke ich, es ist auch ein Weg in Xpath dies in einer for-Schleife zu tun:
name = doc.evaluate("string(/lfm/recenttracks[1]/track["+i+"]/name)");
print(name);
othernode = doc.evaluate("string(/lfm/recenttracks[1]/track["+i+"]/album)");
print(othernode);
und dann i für die nächste Spur zu erhöhen. aber irgendwie gibt das nur eins Artikel zurück. Es ruft nicht mehr Elemente in einer für-Schleife. i-1 funktioniert auch nicht.
Wer weiß, wie man einen Xpath-Ausdruck mit meinem i-Wert verwendet, um einen Knoten auszuwählen und dann die Unterknoten pro Superknoten zu bekommen? Per spur ich möchte künstler, name, streamable, mbid, album, url, bild (klein), bild (mittel), bild (groß) und daten.
meine XML-Datei sieht wie folgt aus:
<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>
ein Beispiel für Ihre Quell-XML und was Sie daraus erhalten möchten, würde helfen. –
fertig, siehe das hinzugefügte xml! – xaddict
und wieder, was willst du daraus machen? –