xml element

Status
Niet open voor verdere reacties.

migthy84

Gebruiker
Lid geworden
13 okt 2009
Berichten
580
Weet iemand hoe ik een element naam uit de xml kan halen

<book>
<title> alive </title>
<author> piers paul read <author>
<price> 29.00 </price>
</book>

in principe ken ik alive, pier paul en 29.00 op halen
terwijl ik ook title , author ,price ook op willen halen. Om deze vervolgens deze ter verwerken
 
Waar komt de xml vandaan? Is het al geparsed? Of is het een xml-string?

Je moet even wat meer informatie geven, want hier kunnen we niets mee.
 
Waar komt de xml vandaan? Is het al geparsed? Of is het een xml-string?

Je moet even wat meer informatie geven, want hier kunnen we niets mee.

in principe staat de xml op de server server als book.xml. Ik laat het in via xmlLoad()

Code:
xml=loadXMLDoc("book.xml");

Ik weet niet echt of dit al gepaserd is. In principe weet ik wel hoe ik string dient te bewerken.
 
Ah, op die manier. Nou, dan is 'ie dus wel 'geparsed'; je hebt nu een object, genaamd xml, van het type XMLDocument. Nu kan je er gewoon DOM-functies op los laten:
[JS]var boeken = xml.getElementsByTagName("book");[/JS]
[JS]var i, l = boeken.length;

for(i=0; i<l; i++)
{
alert("Boek " + i + " heeft als titel: " + boeken.childNodes[0].nodeValue);
}[/JS]
zoiets :) Als je dus ook de <tags> wilt weten, kan je denk ik wel een for each loop gebruiken, maar dat weet ik niet zeker.



:thumb:
 
ik denk dat het te maken heeft dat deze methode de elements uit html het dom object leest
 
Code:
var boeken = xml.getElementsByTagName("*");

een tip wie ik nu weer heb geleerd is als je iets wilt tellen niet de nodes weer geven die je wilt hebben maar nog steeds nog niet de name van element
 
Laatst bewerkt:
Heeft je XML file wel een goede root? Hoe zit je xml er uit?
 
heeft wel een root het irritante vindt ik dat hij null aangeeft.
Code:
<bookstore>

 <book category="COOKING">
   <title lang="en">Everyday Italian</title> 
   <author>Giada De Laurentiis</author> 
    <year>2005</year> 
    <price>30.00</price> 
</book>

<book category="CHILDREN">
  <title lang="en">Harry Potter</title> 
  <author>J K. Rowling</author> 
  <year>2005</year> 
  <price>29.99</price> 
</book>

<book category="WEB">
  <title lang="en">XQuery Kick Start</title> 
  <author>James McGovern</author> 
  <author>Per Bothner</author> 
  <author>Kurt Cagle</author> 
  <author>James Linn</author> 
  <author>Vaidyanathan Nagarajan</author> 
  <year>2003</year> 
  <price>49.99</price> 
 </book>

<book category="WEB">
  <title lang="en">Learning XML</title> 
  <author>Erik T. Ray</author> 
  <year>2003</year> 
  <price>39.95</price> 
</book>
 
 </bookstore>
ik ben bang dat hij niet over weg gan met <book catergory = "web">

ik wil inprincipe een lijst krijgen book, title , year, price.
Deze namen dienen echt dynamisch te kunnen. Ver ben ik in twijfel om dit maar rauw in txt te plaatsen
 
Laatst bewerkt:
Oh jawel, met je XML is niets mis. Ik gebruikte dit test script:[JS]function loadXMLDoc(url)
{
var xmldoc = document.implementation.createDocument("", "", null);
xmldoc.async = false;
xmldoc.load(url);
return xmldoc;
}



var xml=loadXMLDoc("test.xml");



var boeken = xml.getElementsByTagName("book");

var i, l = boeken.length;



for(i=0; i<l; i++)
{
alert("Boek " + (i+1) + " heeft als category: '" + boeken.getAttribute('category') + "'");
}[/JS]Het feit dat het fout ging kwam waarschijnlijk door de async-read; nu staat deze uit, dus gaat ie pas doen als de XML file ook daadwerkelijk compleet geladen is.


Wat nu nog rest is lekker lezen over Javascript DOM traversal (in XML). :thumb:
 
het is de bedoeling dat hij de element namen terug geeft. De waarde weet ik wel

ik wil die niet van te voeren horen te declaren. Met andere worden. Ik ben opzoek naar een script die alles uit leest. En de elementname terug geeft. Zodat ik weet dat price 49.99 zonder aan te geven dat price zoekt.
 
Laatst bewerkt:
Dit is de code die ik gebruik

Code:
<html>
<body>
<script type="text/javascript">
function loadXMLDoc(dname)
{

if (window.XMLHttpRequest)
  {
  xhttp=new XMLHttpRequest();
  }
else
  {
  xhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xhttp.open("GET",dname,false);

xhttp.send("");
return xhttp.responseXML;
}

xml=loadXMLDoc("books.xml");

path="//*";
// code for IE
if (window.ActiveXObject)
{
var nodes=xml.selectNodes(path);

for (i=0;i<nodes.length;i++)
  {
  document.write(nodes[i].childNodes[0].nodeValue);
  document.write("<br />");
  }
}
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument)
{
var nodes=xml.evaluate(path, xml, null, XPathResult.ANY_TYPE,null);
var result=nodes.iterateNext();

while (result)
  {
  document.write(result.childNodes[0].nodeValue);
  document.write("<br />");
  result=nodes.iterateNext();
  }
}
</script>

</body>
</html>
 
De namen van de elementen krijg je terug door .tagName .

Bijvoorbeeld (slaat niet op jouw XML):

[JS]
var xml; // bevat een XML bestand.
document.write ( xml.childNodes(0).tagName );
[/JS]
 
Ik denk dat dat dit moet zijn:[JS]var xml; // bevat een XML bestand.
document.write ( xml.childNodes[0].tagName );[/JS] (rechte haken voor arrays, geen ronde)? Maargoed, het ging om het idee ;)
 
hmm ik krijg echt undifened terug.
Behalve als ik var xml;

document.write ( xml.childNodes[2].tagName );
dan return js de eerste node bookstore
 
Laatst bewerkt:
in principi heb ik de oplossing gevonden,
maar weet niet waarom het zo werkt als eerst zou ik de code geven misschien dat jullie het duidelijk word.

Code:
document.write ( xml.childNodes[2].childNodes[2].childNodes[0].tagName );

waarom dient ik xml.childnode[2] in te vullen. Heeft dit te mee te maken dat je inprincipe 3 diep gaat 1bookstore 2,book 3title daarna sluit je alles weer netjes af. 3 inprincipe ook al.

Wanneer ik in vul xml.childnodes[2].tagName krijg ik ook heel netjes <bookstore> te zien.

Mijn 2e vraag heeft heel veel connecties met de 1e. Maar ik stel hem waarom dien ik inprincipe 3 keer childnodes neer te zetten. Ipv van 1 keer
 
De childNodes van book in dit xml:
Code:
<book>
<title> alive </title>
<author> piers paul read <author>
<price> 29.00 </price>
</book>
zijn als volgt:
Code:
[0] (tag) title
   [0] (text) alive
[1] (tag) author
   [0] (text) piers paul read
[2] (tag) price
   [0] (text) 29.00
zie bijvoorbeeld eens hier (het plaatje, iets lager) voor enige verduidelijking.
 
Laatst bewerkt:
Ik moet zeggen, ik ben misschien iets te kortaf geweest, blijkbaar kun je ook blokhaken gebruiken. Echter las ik in tutorials die ik nodig had voor een sidebar gadget die ik pas gemaakt heb, dat het ronde haken moesten zijn.

Excuses ;)
 
Toch nog even erop ingaan: wel vreemd, want ronde haken betekenen toch echt functie-calls, en rechte haken arrays. Is er toevallig dan een functie die dezelfde naam heeft als de array? Wel een beetje vreemd, maargoed.
(...) voor een sidebar gadget (...)
IE? :p
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan