webForumDet fria alternativet

Hjälp med hämtning från XML-fil

XML

2 svar · 512 visningar · startad av Koplik

Medlem sedan juli 20011 129 inlägg
Frågan#1

Hej!

Jag är ganska färsk på XML och försöker få in i min trånga skalle hur jag hämtar data på ett bra sätt utan att göra om min XML-fil med namespaces eller liknande.

XML-filen ser ut på följande sätt

<School>
 <Coordinates Latitude="59.361934" Longitude="18.144178"/>
  <Area>
   <Name>Lidingö, Sweden</Name>
   <Description>Information om Lidingö i Sverige</Description>
 </Area>
 <Name>Rudbodaskolan, klass 2</Name>
 <Description>Information rörande Rudbodaskolan</Description>
</School>

Det jag vill göra är att hämta Namnet på skolan utan att ange position som jag gör för tillfället. (Använder mig av Javascript, men det ser väl likadant ut oavsett språk)
För att hämta rätt data idag så gör jag på följande sätt

var xml = GXml.parse(data);
var markers = xml.documentElement.getElementsByTagName("School");

for (var i = 0; i < markers.length; i++) {
markers[i].getElementsByTagName("Area")[0].getElementsByTagName("Name")[0].firstChild.nodeValue;

//Hämtar namnet på skolan för att populera rullisten
var schoolName = markers[i].getElementsByTagName("Name")[1].firstChild.nodeValue;

Hämtningen av "Name" från "Area" fungerar någorlunda tillfredsställande då jag alltid kommer att få ut rätt nod. Dock så när jag kör getElementsByTagName("Name") direkt under skolan så hämtar den även Name som ligger under Area. Vilket jag blir frustrerad över då jag måste ange position 1 istället för 0, och därmed gör det lätt att förstöra hämtningen om man ändrar i XML-filen.
Finns det något sätt att hämta Name som ligger direkt under <School> istället för att den hämtar alla instanser av Name oavsett hierarkisk position?

Jag skulle vilja ha något som t.ex. markers*.getElementByTagName("Name").firstChild.nodeValue; som enbart returnerar elementet som ligger direkt under <School>.

Ge mig också gärna tips och förslag på hur jag skulle kunna göra om XML-filen och hämtningar så att jag inte fortsätter jobba på vad jag förmodar är ett felaktigt sätt.*

Medlem sedan sep. 200593 inlägg
#2

har inte testat, men tänker i tankar om xpath...

var schoolName = xml.evaluate("//school/name", xml, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); 
schoolNameStr = schoolName.singleNodeValue.textContent;
alert(schoolNameStr);

tror inte riktigt jag greppar ditt problem, för sent på kvällen kanske.

Medlem sedan juli 20011 129 inlägg
#3

Tackar!

Det ser bra och rätt ut. Sen om det fungerar får vi se imorgon eller på tisdag då jag kan prova det :)

I'll be back

258 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)