[xml+js+dom] XML splitsen in aparte JS variabelen

Pagina: 1
Acties:

  • AxiMaxi
  • Registratie: December 2000
  • Laatst online: 27-05 15:33
Stel, ik heb de volgende data in XML:
code:
1
2
3
4
5
 <boek id="001">
   <titel>XML in dertien delen</titel>
   <auteur>Xander M. Landgraaf</auteur>
   <trefwoord>XML, DOM, XSL, XSLT</trefwoord>
 </boek>


Met DOM kan je dit prima uitlezen in JavaScript:
code:
1
2
3
4
5
6
<script type="text/javascript">
 var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
 xmlDoc.async="false"
 xmlDoc.load("boekenlijst.xml")
 // ... en de rest van je script hier
</script>


Vervolgens kan je in JavaScript xmlDoc.documentElement.childNodes gebruiken, maar dan krijg je dus:

XML in dertien delenXander M. LandgraafXML, DOM, XSL, XSLT

in je string te staan; kortom, alle data aan elkaar in één geheel. |:(

De afzonderlijke <tags> krijg ik niet gesplitst, simpelweg omdat ik niet weet hoe (en ik kan het ook nergens vinden op internet).
Ik wil dus een aparte JavaScript string maken van de inhoud van <titel>, <auteur> en <trefwoord>. Bovendien wil ik de attribute van <boek> ("0001") in een variabele stoppen.

Hoe? :?

[Hier had mijn handtekening kunnen staan]


  • Hoppie
  • Registratie: Februari 2001
  • Niet online
MSDN XML dom 3.0
Hier vind je een complete reference.
Kijk er 's naar.

  • [eNeRGy]
  • Registratie: November 1999
  • Laatst online: 24-04-2025
.childNodes is een array van elementen, dus met childNodes[0], [1], etc zou je de afzonderlijke elementen moeten krijgen.

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Alleen de uitvraging van de attribuutvalue weet ik niet zeker, maar ik zou het ongeveer zo doen:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
var boek = new Array();
var titel = new Array();
var auteur = new Array();
var trefwoord = new Array();

for (var i=0; i < xmlDoc.getElementsByTagName('boek').length; i++) {

  boek[ i ] = xmlDoc.getElementsByTagName('boek').item(i).attributes('id').value; // ??
  titel[ i ] = xmlDoc.getElementsByTagName('titel').item(i).childNodes.item(0).nodeValue;
  auteur[ i ] = xmlDoc.getElementsByTagName('auteur').item(i).childNodes.item(0).nodeValue;
  trefwoord[ i ] = xmlDoc.getElementsByTagName('trefwoord').item(i).childNodes.item(0).nodeValue;

}


edit:

vaag; hij haalt mijn [ i ]-tjes weg als ik er geen spaties omheen zet...

Intentionally left blank


  • AxiMaxi
  • Registratie: December 2000
  • Laatst online: 27-05 15:33
crisp schreef op 22 augustus 2002 @ 13:01:
vaag; hij haalt mijn [ i ]-tjes weg als ik er geen spaties omheen zet...
Nee, da's niet vaag, want [ i ] zonder spaties is de code voor cursief. :)

Overigens bedankt. Ziet er goed uit, zal 't 's proberen.

[Hier had mijn handtekening kunnen staan]


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

AxiMaxi schreef op 22 augustus 2002 @ 13:31:
[...]


Nee, da's niet vaag, want [ i ] zonder spaties is de code voor cursief. :)

Overigens bedankt. Ziet er goed uit, zal 't 's proberen.
Het is wel vaag, want binnen [ code ] tags hoort dat niet geparsed te worden...
Laat even weten of het werkt; dat met die attribuut waarde heb ik even zo uit het hoofd gedaan, dus grote kans dat het toch anders moet.

Intentionally left blank


  • AxiMaxi
  • Registratie: December 2000
  • Laatst online: 27-05 15:33
crisp schreef op 22 augustus 2002 @ 13:39:
Laat even weten of het werkt; dat met die attribuut waarde heb ik even zo uit het hoofd gedaan, dus grote kans dat het toch anders moet.
Geweldig, het hele spulletje werkt! _/-\o_

Alleen moet je ('id') bij attribute vervangen door (0), anders zegt hij "typen komen niet overeen" of iets van die strekking.

Hartstikke bedankt!

[Hier had mijn handtekening kunnen staan]


  • [eNeRGy]
  • Registratie: November 1999
  • Laatst online: 24-04-2025
crisp schreef op 22 augustus 2002 @ 13:01:
titel[ i ] = xmlDoc.getElementsByTagName('titel').item(i).childNodes.item(0).nodeValue;
* [eNeRGy] wil alles altijd korter schrijven: :)

xmlDoc.getElementsByTagName('titel').item(i).childNodes.item(0).nodeValue;

===

xmlDoc.getElementsByTagName('titel')[ i ].childNodes[0].nodeValue;

  • Apie!
  • Registratie: Januari 2000
  • Laatst online: 09-03 19:55

Apie!

Newer, better & confusinger

[eNeRGy] schreef op 22 augustus 2002 @ 14:48:
[...]


* [eNeRGy] wil alles altijd korter schrijven: :)

xmlDoc.getElementsByTagName('titel').item(i).childNodes.item(0).nodeValue;

===

xmlDoc.getElementsByTagName('titel')[ i ].childNodes[0].nodeValue;
ff off-topic maar:
[eNeRGy] is een pijn in de ess voor toekomstige beheerders :)

* Apie! wilde ook altijd alles altijd korter schrijven (8>
* Apie! kwam er tijdens het beheren van een redelijk grote applicatie achter dat toen ik 't schreef waarschijnlijk even een briljant moment had :+
* Apie! is daar op terug gekomen omdat het niet te beheren was :'(
* Apie! schrijft tegenwoordig alles lekker voluit aangezien het qua performance toch niet uitmaakt :z

* Apie! 's 2 cents

My lungs taste the air of Time
Blown past falling sands

Pagina: 1