Avatar billede haunted Nybegynder
10. april 2003 - 14:53 Der er 5 kommentarer og
2 løsninger

XML: hent af subniveau

Hej med jer.

Jeg har nedenstående XML dokument

<kampe>
    <kamp>
        <runde>1</runde>
        <dato>28.04.2003</dato>
        <klokken>17.15</klokken>
        <players>
            <player>jens</player>
            <player>ole</player>
            <player>bent</player>           
        </players>
        <referat>-</referat>
    </kamp>
    <kamp>
        <runde>2</runde>
        <dato>05.05.2003</dato>
        <klokken>18.10</klokken>
        <players>
            <player></player>
        </players>
        <referat>-</referat>
    </kamp>

<!-- flere endnu ... -->
</kampe>

Hvordan får jeg fat i alle "player" attributter under hver players.

Min kode indtil videre ser nogenlunde sådanne ud...

  xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
  xmlDoc.async="false";
  xmlDoc.load("kampe.xml");
  nodes=xmlDoc.getElementsByTagName('kamp');

  ... nogle document.write's

  document.write("<tr"><td>Runde:</td>");
  document.write("<td>" + nodes[values].childNodes[0].firstChild.nodeValue + "</td></tr>");
  document.write("<tr"><td>Dato:</td>");
  document.write("<td>" + nodes[values].childNodes[1].firstChild.nodeValue + "</td></tr>");
  document.write("<tr"><td>kl:</td>");
  document.write("<td>" + nodes[values].childNodes[2].firstChild.nodeValue + "</td></tr>");
  document.write("<tr"><td>Players:</td>");
  document.write("<td>" + nodes[values].childNodes[3].firstChild.nodeValue + "</td></tr>");
  document.write("<tr"><td>Referat:</td>");
  document.write("<td>" + nodes[values].childNodes[4].firstChild.nodeValue + "</td></tr>");

  ... nogle document.write's

På forhånd tak.
Avatar billede olebole Juniormester
10. april 2003 - 15:14 #1
<ole>

Hmmmm ... er det ikke bare XLS, du skal have gang i? Hvad skal du bruge det til - og hvordan?

/mvh
</bole>
Avatar billede atoft Nybegynder
10. april 2003 - 15:20 #2
Det er noget være noget du har gang i :-)

Du skal ikke bruge childNodes, i stedet bør du bruge element navnene. Således f.eks.

var kampe = xmlDoc.selectNodes("//kamp");

for (var i=0; i<kampe.lenth ; i++) {
    var kamp = kampe[i];
   
    document.write("<tr"><td>Runde:</td>");
    document.write("<td>" + kamp.selectSingleNode("runde").text + "</td></tr>");
 
    document.write("<tr"><td>Players:</td>");
    var players = kamp.selectNodes(".//player");
    for (var j=0;j < players.length;j++) {
      document.write("<td>" + players[j].text + "</td></tr>");
    }

}
Jeg har udeladt nogle document.writes. Men dem kan du sikkert selv fylde på nu.
Avatar billede warpgiga Nybegynder
10. april 2003 - 15:38 #3
// DOM version uden XSL (skrevet direkte ind, ikke testet)

var mineKampe = xmlDoc.getElementsByTagName('kamp');

for(var i = 0; i < mineKampe.childNodes.length; i++){
var denneKamp = mineKampe[i]
var playerListe = denneKamp.getElementsByTagName('players');[0].getElementsByTagName('player');
for(var p = 0; p < playerListe.childNodes.length; p++){

  alert(playerListe[p].nodeValue);
}
} // end for(i)

/* håber det måske kan hjælpe, hvis du vil bruge DOM istedet for XSL, ikke at der er noget i vejen med XSL! Det bare ik DOM ;) */
Avatar billede warpgiga Nybegynder
10. april 2003 - 15:44 #4
Hvis du vil bruge DOM i Mozilla så overvej at bruge "nodomws.js" funktionerne fra Mozilla.org for at undgå problemer med irriterende whitespace nodes.

<mvh><Fini/></mvh>
Avatar billede haunted Nybegynder
10. april 2003 - 22:09 #5
Jeg brugte atoft's løsning og det virkede i første hug det var sgu' kanon...

Men jeg giver også nogle point til Warpgiga fordi han også er kommet med et forslag....

olebole>> XLS har jeg kigget lidt på men det forvirrede mig mere end det hjalp så jeg droppede det. Men jeg kan godt se at det vil blive rimelig overskueligt at lave xsl templates istedet.

Tak for hjælpen
Avatar billede warpgiga Nybegynder
11. april 2003 - 06:16 #6
Hej Haunted, tak for points! cool hehe

Jeg giver dig ret i at XSL/XSLT/XPath kan virke meget mystisk i starten (og også senere! hvis man er væk fra det nogle måneder!!)

Men se evt. denne dejlige tutorial som ihvertfald lærte mig en del basic stuff på en fed måde:

http://www.zvon.org/xxl/XSLTutorial/Books/Book1/

et anden god resource er selvfølgelig: http://www.w3schools.com/xsl/

Desuden kan jeg på det kraftigste anbefale at du skaffer et lille tool som kan afvikle XPath selections, og et der kan køre hele XSL dokumenter, det kan KUN betale sig at lære om XPath før XSL idet det bliver brugt heftigt i XSL..

Nu jeg er igang, kan jeg også fortælle/advare om at selv om XSL stort kan ALT! (ja, den er go nok!) så er det langtfra alt som er smart.. XSL er et programmerings sprog, og derfor kan "dårlig" kode sagtens opstå ;)

Mvh //humans/earth/boys/creature[@id='WarpGiGA']/full-name/text()
Avatar billede warpgiga Nybegynder
11. april 2003 - 06:26 #7
Den vakse xsl hund vil selvfølgelig vide at ovenstående xsl peger på:

<humans>
  <earth>
    <boys>
      <creature id="WarpGiGA">
        <full-name>Fini A. Alring</full-name>
        <comment>Just for laughs ;o)</comment>
      <creature>
    </boys>
  </earth>
</humans>

- off to bed... shutting down primary consciousness handlers...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester