Avatar billede mikmakmuk Nybegynder
03. november 2003 - 23:53 Der er 27 kommentarer og
1 løsning

Løbe en xmlfil igennem

Hej Eksperter,

Mit spørgsmål er hvordan jeg for vist alt der er i min xmlfil. Jeg er med på at jeg skal bruge en for løkke, men hvordan jeg finder ud af hvor mange forekomster der er i filen ved jeg ikke. Mit udgangspunkt kan ses her

http://www.web-oasen.dk:8080/xmltest/xml3.html
Avatar billede mikmakmuk Nybegynder
04. november 2003 - 00:16 #1
Jeg er på vej i seng. I det tilfælde at en natteravn skulle kigge forbi smider jeg lige koden som jeg har den nu ;-)

<html>
<head>
<title>XML</title>

<script type="text/javascript">

function showXML()
{
 
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
 
    xmlhttp.open("POST","http://web-oasen.dk:8080/xmltest/servlet/Login",false)
    xmlhttp.send("<time>3:48</time>")

    var dom = xmlhttp.responseXML;
     
    for(i=0;i<1;i++) {
    var title = dom.getElementsByTagName("title").item(i).firstChild.nodeValue;
    var kunstner = dom.getElementsByTagName("kunstner").item(i).firstChild.nodeValue;
    var time = dom.getElementsByTagName("time").item(i).firstChild.nodeValue;
   
    document.getElementById("title").innerHTML = title;
    document.getElementById("kunstner").innerHTML = kunstner;
    document.getElementById("time").innerHTML = time;
    }
}

</script>


</head>
<body>

<h1>XML</h1>
<form>
<input type="button"
onclick="showXML()"
value="Vis data">
</form>


<table style="width:500px">
<tr>
<td>Title</td>
<td>Kunstner</td>
<td>Tid</td>
</tr>

<tr>
<td><span id="title"></span></td>
<td><span id="kunstner"></span></td>
<td><span id="time"></span></td>
</tr>
</table>

</body>
</html>
Avatar billede olebole Juniormester
04. november 2003 - 05:29 #2
<ole>

1. Nu har du tre ens, åbne spørgsmål ... du må have ét.
2. Serveren er nede - der kan ikke testes

/mvh
</bole>
Avatar billede mikmakmuk Nybegynder
04. november 2003 - 08:56 #3
Så er serveren oppe igen. Det jeg gerne vil ende med er en servlet som henter noget data fra en database og returnere det som noget XML. Den side af sagen har jeg rimmelig styr på. Formålet er ene og alene at jeg gerne vil lære at anvende XML.
Avatar billede mikmakmuk Nybegynder
04. november 2003 - 12:05 #4
Min xmlfil ser således ud (er det korrekt?). Det jeg har brug for at finde ud af er hvor mange <nr> der er i sange

<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>");

<sange>
       
    <nr>
    <title>All I Wanna Do</title>
    <kunstner>Sheryl Crow</kunstner>
    <time>4:48</time>
    </nr>
       
    <nr>
    <title>Leaving Las Vegas</title>
    <kunstner>Sheryl Crow</kunstner>
    <time>4:48</time>
    </nr>
       
</sange>
Avatar billede olebole Juniormester
04. november 2003 - 14:15 #5
Jeg tror, du blander en del forskellige XML-teknologier sammen.
1. Vil du binde XML-data til en enkelt tabel?
2. Vil du løbe XML'en igennem og skrive en tabel ud?
3. Hvorfor læser du ikke noget grundlæggende om XML i stedet?
Avatar billede mikmakmuk Nybegynder
04. november 2003 - 14:36 #6
Det er nummer 2 jeg gerne vil. Der skal ikke være nogen tvivl om at jeg sætter pris på din hjælp. Det er kanon at der er folk som gider involverer dig og dele ud af deres kompetance. Anyway jeg har fundet ud af hvordan jeg får den variable jeg skal bruge til min for løkke, nu skal jeg bare finde ud af hvordan jeg får det skrevet ud i en tabel
Avatar billede mikmakmuk Nybegynder
04. november 2003 - 14:36 #7
var x=dom.getElementsByTagName("nr").length;
Avatar billede mikmakmuk Nybegynder
04. november 2003 - 14:36 #8
for(i=0;i<x;i++) {
    var title = dom.getElementsByTagName("title").item(i).firstChild.nodeValue;
    var kunstner = dom.getElementsByTagName("kunstner").item(i).firstChild.nodeValue;
    var time = dom.getElementsByTagName("time").item(i).firstChild.nodeValue;
   
    document.getElementById("title").innerHTML = title;
    document.getElementById("kunstner").innerHTML = kunstner;
    document.getElementById("time").innerHTML = time;
    }
Avatar billede olebole Juniormester
04. november 2003 - 16:31 #9
Der er for såvidt ingen grund til at oprette de tre arrays ( dom.getElementsByTagName("title") ... osv ). Du kan også gøre sådan, hvilket jeg mener er en del hurtigere (mere effektivt):

<html>
<head>
<title>XML</title>
<script type="text/javascript">
function showXML() {
    var title, kunstner, time, dom, nodes, len;
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
   
    xmlhttp.open("POST","http://web-oasen.dk:8080/xmltest/servlet/Login",false)
    xmlhttp.send("<time>3:48</time>")
   
    dom = xmlhttp.responseXML;
    nodes = dom.documentElement.childNodes;
    len = nodes.length;
    for(i=0; i<len; i++) {
        newRow = document.getElementById("bla").insertRow();
        newCell = newRow.insertCell(0);
        newCell = newCell.innerHTML = nodes.item(i).childNodes[0].text;
        newCell = newRow.insertCell(1);
        newCell = newCell.innerHTML = nodes.item(i).childNodes[1].text;
        newCell = newRow.insertCell(2);
        newCell = newCell.innerHTML = nodes.item(i).childNodes[2].text;
    }
}
</script>
</head>
<body>

<h1>XML</h1>
<form>
<input type="button"
onclick="showXML()"
value="Vis data">
</form>

<table id="bla" style="width:500px">
<tr>
    <td>Title</td>
    <td>Kunstner</td>
    <td>Tid</td>
</tr>
</table>

</body>
</html>

Om du så vil indsætte i tabellen med DOM eller udskrive den i en streng, må du selvom ... her har jeg brugt DOM  :)
/mvh
Avatar billede olebole Juniormester
04. november 2003 - 16:35 #10
Hmmm .... der var lidt af hvert i den funktion, selvom den nok vil fungere. Prøv denne i stedet:

function showXML() {
    var title, kunstner, time, dom, nodes, len;
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
   
    xmlhttp.open("POST","http://web-oasen.dk:8080/xmltest/servlet/Login",false)
    xmlhttp.send("<time>3:48</time>")
   
    dom = xmlhttp.responseXML;
    nodes = dom.documentElement.childNodes;
    len = nodes.length;
    for(i=0; i<len; i++) {
        newRow = document.getElementById("bla").insertRow();
        newCell = newRow.insertCell(0);
        newCell.innerHTML = nodes.item(i).childNodes[0].text;
        newCell = newRow.insertCell(1);
        nnewCell.innerHTML = nodes.item(i).childNodes[1].text;
        newCell = newRow.insertCell(2);
        newCell.innerHTML = nodes.item(i).childNodes[2].text;
    }
}


Og i stedet for:
  newCell.innerHTML = nodes.item(i).childNodes[0].text;
kan du også blot skrive:
  newCell.innerHTML = nodes[i].childNodes[0].text;
Avatar billede olebole Juniormester
04. november 2003 - 16:37 #11
sdavø-fajl i denne linie:
  nnewCell.innerHTML = nodes.item(i).childNodes[1].text;
skal være:
  newCell.innerHTML = nodes.item(i).childNodes[1].text;
... sorry  ;o)
Avatar billede mikmakmuk Nybegynder
04. november 2003 - 16:40 #12
Jeg vil prøve det. Tak for det hele :-)
Avatar billede mikmakmuk Nybegynder
04. november 2003 - 16:41 #13
Du kan let teste op imod min server, hvis du har lyst
Avatar billede olebole Juniormester
04. november 2003 - 16:44 #14
Have done so  ;o)
Avatar billede olebole Juniormester
04. november 2003 - 16:47 #15
Til gengæld ville jeg gerne se, hvad du laver i servelet'en for at få fat i:
  xmlhttp.send("<time>3:48</time>")
Ikke at jeg skriver JSP - men det må kunne bruges i PHP/ASP også  ;o)
Jeg har nemlig kun selv prøvet at GET'e med en query-streng
Avatar billede mikmakmuk Nybegynder
04. november 2003 - 16:48 #16
fedt :-)
Avatar billede mikmakmuk Nybegynder
04. november 2003 - 16:50 #17
Det må du meget gerne
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;


public class Login extends HttpServlet
    {
       
        public void doPost(HttpServletRequest request,
                      HttpServletResponse response)
        throws ServletException, IOException
        {
        PrintWriter        out;
        response.setContentType("text/xml");
        StringBuffer buffer = new StringBuffer();

    //    String param = request.getParameter ("param");
       
        BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
        String result = reader.readLine();
        System.out.println(result);

        out = response.getWriter();
        buffer.append("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>");

        buffer.append("<sange>");
       
        buffer.append("<nr>");
        buffer.append("<title>All I Wanna Do</title>");
        buffer.append("<kunstner>Sheryl Crow</kunstner>");
        buffer.append(result);
        buffer.append("</nr>");
       
        buffer.append("<nr>");
        buffer.append("<title>Leaving Las Vegas</title>");
        buffer.append("<kunstner>Sheryl Crow</kunstner>");
        buffer.append("<time>4:48</time>");
        buffer.append("</nr>");
       
        buffer.append("</sange>");
               
        out.println(buffer.toString());
    //    System.out.println(buffer.toString());
        out.close();
        }

}
Avatar billede olebole Juniormester
04. november 2003 - 16:57 #18
Ahaa ... vil det ikke sige, denne her:
  public void doPost(HttpServletRequest request .... osv

henter POST-requesten gennem klassen HttpServlet? .... eller?  :)
Avatar billede mikmakmuk Nybegynder
04. november 2003 - 17:44 #19
jepper
Avatar billede mikmakmuk Nybegynder
04. november 2003 - 17:44 #20
det er faktisk ret smart :-)
Avatar billede olebole Juniormester
04. november 2003 - 17:52 #21
Ja, jeg kan se, jeg vist skal have en komponent installeret, før det funker i PHP.
GET er jo ikke noget problem - men POST ... hmmm  :)
Avatar billede smirnoff Nybegynder
05. november 2003 - 11:41 #22
I PHP kan du bruge variablen:

$HTTP_RAW_POST_DATA

- den indeholder der du sender i xmlhttp.send("<time>3:48</time>")
Avatar billede smirnoff Nybegynder
05. november 2003 - 11:42 #23
I ASP gør man bare dette:

xmldom.load(Request);
Avatar billede olebole Juniormester
05. november 2003 - 12:34 #24
smirnoff >> $HTTP_RAW_POST_DATA virker ikke en dyt hos mig  :o/
Avatar billede smirnoff Nybegynder
05. november 2003 - 12:42 #25
hmm - virker fint her ... hvilken php-version bruger du?!
Avatar billede mikmakmuk Nybegynder
05. november 2003 - 19:37 #26
tak for hjælpen. Problemet er løst så læg et svar :-)
Avatar billede olebole Juniormester
05. november 2003 - 23:18 #27
smirnoff >> Jeg har en 4.3.1 installeret på min Win2K-laptop

mikmakmuk  ;o)
Avatar billede mikmakmuk Nybegynder
06. november 2003 - 08:39 #28
Det endte i øvrigt således

http://web-oasen.dk:8080/xmltest/xml4.html
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