Jag tänkte fortsätta att ställa ett par frågor till här på forumet. Man får ju så bra svar här...:) xml läsaren är väl kanske inte den mest smidiga på marknaden men det fungerar iaf... ;) Tackar, jag ska sätta mig med detta inatt och se om jag kan göra nåt av det. Jag återkommer troligen med fler frågor. Jag tyckte du hade svarat riktigt bra, men jag fattade visst inte ändå....( OM jag skulle göra en RSS-feeder till en sån här XML-fil. http://www.dn.se/DNet/jsp/polopoly.jsp?d=1400 Så kan jag inte göra på det sättet eller? Det är bara title och link taggarna i item-taggarna jag vill åt. Hja fråga på... ;) <code> hmmm... tryckte på fel knapp så att allt jag skrev försvann hmm jag får inte detta att fungera. Har du tid och lust att kolla min kod?`har suttit hela dagen med det nu. Jag skickar med hela koden. Det fungerar att hämta xml-filen, det är just att hitta rätt bland alla noder som inte fungerar. ..finns det stöd för XPath? Nu har jag gjort om den lite... så du får anpassa den för din application men nu plockar den ut title och link och lägger den i en 2d array Simon: nej det gör inte det... tyvärr.... Tackar och bockar Martin. Efter en del ändringar fungerar det perfekt...:)Hur fungerar det här med noder?
Jag försöker göra en enkel RSS-läsare i Flash, men jag kan inte fatta hur det här med noder hänger ihop riktigt. Finns det någon här som skulle kunna förklara detta? I en RSS-läsare blir det ju massor med noder man ska gå igenom, tror jag i alla fall.
Jag har försökt att komma ner till taggen "item" och sen loopa igenom alla itemtaggar. Det är kanske inte det smartaste sättet.Sv: Hur fungerar det här med noder?
ex på xml
<code>
<bas>
<grupp>
<head>Härliga xml</head>
<text>massa brödtext</text>
</grupp>
<grupp>
<head>Härliga xml</head>
<text>massa brödtext</text>
</grupp>
<grupp>
<head>Härliga xml</head>
<text>massa brödtext</text>
</grupp>
</bas>
</code>
det man hel enkelt får gör att kolla många grupp noder som finns.
och sen loopa igenom dem... och lägga allt i en array
<code>
//arrayen som vi ska spara all info i
xmlArr = new Array();
//xml är laddad och vi loopar igenom noderna...
for (itemNode in xml.childNodes){
//hämta head värdet
headString = xml.childNodes[itemNode].childNodes[0].nodeValue;
//hämta bröd text
breadTextString = xml.childNodes[itemNode].childNodes[1].nodeValue;
//lägg till i array
xmlArr = new Array();
xmlArr[0] = headString;
xmlArr[1] = breadTextString;
}
//sen får vi loopa igenom arrayen när vi ska visa det
</code>
ett alternativ i for satsen är detta:
<code>
for (i=0; i<xml.childNodes.length; i++){
//hämta head värdet
headString = xml.childNodes[i].childNodes[0].nodeValue;
//hämta bröd text
breadTextString = xml.childNodes[i].childNodes[1].nodeValue;
//lägg till i array
xmlArr = new Array();
xmlArr[0] = headString;
xmlArr[1] = breadTextString;
}
</code>
hoppas att det förklarar lite mer...
=)Sv:Hur fungerar det här med noder?
Sv: Hur fungerar det här med noder?
Jag har försökt med detta, jag får ut första title-taggen då. Men det verkar ju långsökt om man ska behöva göra på ett så krångligt sätt.
<code>
var XMLnRoot:XMLNode = XMLRss.firstChild;
var aNodes:Array = XMLnRoot.childNodes;
for(var i:Number = 0; i < aNodes.length; i++){
trace(aNodes[i].firstChild.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.firstChild.firstChild);
</code>Sv:Hur fungerar det här med noder?
nu ska vi se... jag kan av någon underlig anledning så kan jag inte se just xml strukturen...
så jag vet inte riktigt hur den ser ut =/
men som jag sa så är inte inte flash så där super smidig när det gäller xml.. ;)
men kan du göran en copyPaste variant på xml strukturen? så kan jag kanske hjälpa dig...
för jag håller med om att det ser lite knöligt ut med dina nextsiblings.. ;)Sv: Hur fungerar det här med noder?
<?xml version="1.0" encoding="ISO-8859-1" ?>
- <rss version="0.91">
- <channel>
<title>DN - Senaste Nytt</title>
<link>http://www.dn.se/</link>
<description>Senaste nytt från DN.se</description>
<language>sv-se</language>
- <image>
<title>Dagens Nyheter</title>
<url>http://www.dn.se/content/2/c4/14/00/logoDagensNyheter.gif</url>
<link>http://www.dn.se/</link>
<width>144</width>
<height>18</height>
</image>
- <item>
<title>Massiva polisinsatser i Gaza</title>
<link>http://www.dn.se/DNet/jsp/polopoly.jsp?d=148&a=440317</link>
<description>Det ser tufft ut både för den palestinske ledaren Mahmoud Abbas och för Israels premiärminister Ariel Sharon.
Trycket på dem för att bevara den sköra vapenvilan mellan Israel och Palestina är hårt. Samtidigt utmanas de båda ständigt på hemmaplan av extremister som vill öka sitt inflytande.</description>
</item>
- <item>
<title>Djurterror fråga för USA-konferens</title>
<link>http://www.dn.se/DNet/jsp/polopoly.jsp?d=148&a=440316</link>
<description>Veterinärer och andra djurexperter från hela världen försöker på en konferens i USA kartlägga hur olika djursjukdomar kan användas av terrorister.</description>
</item>
</code>
Sen fortsätter ju item-taggarna.Sv:Hur fungerar det här med noder?
låt oss börja om
<code>
// skapa arrayen
rssXmlArr = new Array();
//loopa igenom xmlen
for (i=0; i<xml.childNodes.length; i++){
//kontrollera att det är item
if(xml.childNodes[i].nodeName == "item"){
rssTitle = xml.childNodes[i].childNodes[0].nodeValue;
rssLink = xml.childNodes[i].childNodes[1].nodeValue;
rssDesc = xml.childNodes[i].childNodes[2].nodeValue;
//lägg till i array
rssXmlArr = new Array();
rssXmlArr[0] = rssTitle;
rssXmlArr[1] = rssLink;
rssXmlArr[2] = rssDesc;
}
}
</code>
Så nu ska vi se... jag tror att det ska fungera...
xml = den variabel som du har laddat in rss-feed:en i
sen loopar jag igenom alla childNodes i första nivån och kontrollerar om nodeName är item isåfall hämtar jag ut title, link och desc...Sv: Hur fungerar det här med noder?
<code>
// Kontrollerar vilken RSS-feed som ska laddas...
RSSListener = new Object();
var selectIndex:String = "";// Skapar variabeln som jag ska spara sökvägen till XML-filen i...
RSSListener.change = function(eventObj:Object) {
// IF-satser som kontrollerarar vilken RSS-feed som ska laddas...
if(eventObj.target.selectedIndex == 1) {
selectIndex = "http://www.idg.se/tjanster/rss/rss.xml";
}
if (eventObj.target.selectedIndex == 2) {
selectIndex = "http://www.dn.se/DNet/jsp/polopoly.jsp?d=1400";
}
if (eventObj.target.selectedIndex == 3) {
selectIndex = "http://www.flzone.com/rss.asp";
}
//trace(selectIndex); // För utveckling...
XMLRss.load(selectIndex);
}
cboChoose.addEventListener("change", RSSListener);
var XMLRss:XML = new XML();// Ny instans av XML...
XMLRss.ignoreWhite = true;
System.useCodepage = true;// för att kunna använda svenska tecken...
// Funktion som körs när XML-filen laddas...
XMLRss.onLoad = function(bSucces:Boolean):Void {
if(bSucces) {
var rssTitle:String = "";
var rssLink:String = "";
var aRSS:Array = new Array;
var XMLRoot:XMLNode = XMLRss.firstChild;
for(var i:Number = 0; i < XMLRoot.childNodes.length; i++) {
if (XMLRoot.childNodes[i].nodeName == "item") {
rssTitle = XMLRoot.childNodes[i].childNodes[0].nodeValue;
rssLink = XMLRoot.childNodes[i].childNodes[1].nodeValue;
aRSS[0] = rssTitle;
aRSS[1] = rssLink;
}
trace(aRSS);
}
}
else {
// Visas om filen inte går att ladda...
lblLoadMess.text =("Det gick inte att ladda filen");
}
};
</code>Sv:Hur fungerar det här med noder?
i så fall borde det ju vara simplare att starta med /channel/item och sedan getElementByTagName("title").firstChild.nodeValue osv..Sv:Hur fungerar det här med noder?
hoppas att det hjälper och funkar..
//Martin
<code>
System.useCodepage = true;// för att kunna använda svenska tecken... <<<denna ska ligga övers på sidan/i koden
var XMLRss:XML = new XML();// Ny instans av XML...
XMLRss.ignoreWhite = true;
trace('testing')
// Funktion som körs när XML-filen laddas...
XMLRss.onLoad = function(bSucces:Boolean):Void {
if(bSucces) {
var rssTitle:String = "";
var rssLink:String = "";
var aRSS:Array = new Array;
for(i in XMLRss.firstChild.childNodes[0].childNodes){
if (this.firstChild.childNodes[0].childNodes[i].nodeName == "item") {
rssTitle = this.firstChild.childNodes[0].childNodes[i].childNodes[0].firstChild.nodeValue;
//trace('title: ' + rssTitle);
rssLink = this.firstChild.childNodes[0].childNodes[i].childNodes[1].firstChild.nodeValue;
//trace('rssLink: ' + rssLink);
aRSS[i] = new Array(); //<<<<< skapar en 2d array
aRSS[i][0] = rssTitle;
aRSS[i][1] = rssLink;
}
//trace(aRSS);
}
}
else {
// Visas om filen inte går att ladda...
lblLoadMess.text =("Det gick inte att ladda filen");
}
//loopa igenom 2d array:en aRSS
for (x=0; x<aRSS.length; x++)
{
trace('title: ' + aRSS[x][0]);
trace('link' + aRSS[x][1]);
}
};
// tillfällig load funk av xml...
XMLRss.load("http://www.dn.se/DNet/jsp/polopoly.jsp?d=1400");
</code>Sv: Hur fungerar det här med noder?
dock vet jaag att det är någon snubbe som bygger liknande stöd men dock ej inbyggt...Sv: Hur fungerar det här med noder?