Avatar billede aitnemed Novice
18. december 2008 - 14:18 Der er 15 kommentarer og
1 løsning

Hentning af indhold fra XML til tekst på en html-hjemmeside

Jeg er nødt til at overlade dette spørgsmål til eksperterne, da jeg har sidder og læst på w3schools samt prøvet mig frem - uden held.

Mit problem er, at jeg har lavet en xml-fil, hvori der ligger noget tekstindhold, som jeg skal have vist på en hjemmeside, hvor det loades via javascript... Men jeg kan ikke få det til at virke.

Når jeg loader testsiden, så skulle den hente tekst fra xml-filen, men der bliver ikke vist noget på siden. Jeg har dog indført et "check" og kan se, at xml-filen loades godt nok... Så hvad jeg mangler at gøre, aner jeg simpelthen ikke.

Jeg kan lige tilføje, at jeg tester i firefox.

Jeg har lavet en simpel html side til at teste det i, inden jeg implementerer det på den rigtige side.

Testkoden er her:
-----------------------------------------------------------------
<html>
<head>
<script type="text/javascript">
function parseXML()
{
try //Internet Explorer
  {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  }
catch(e)
  {
  try //Firefox, Mozilla, Opera, etc.
    {
    xmlDoc=document.implementation.createDocument("","",null);
    }
  catch(e)
    {
    alert(e.message);
    return;
    }
  }
xmlDoc.async=false;
xmlDoc.load("danwater_homepage_text.xml");

if(xmlDoc.load("danwater_homepage_text.xml")==1){
document.getElementById("test").innerHTML="indlaest xml";
}

document.getElementById("header").innerHTML=
xmlDoc.getElementsByTagName("header")[0].childNodes[0].nodeValue;
document.getElementById("normal_tekst").innerHTML=
xmlDoc.getElementsByTagName("normal_tekst")[0].childNodes[0].nodeValue;
}
</script>
</head>

<body onload="parseXML()">
<h1>Danwater</h1>
<h1><span id="header"></span><br/></h1>
<p>
<b>Test:</b> <span id="test"></span><br />
<b>Indholdstekst:</b> <span id="normal_tekst"></span><br />
</p>
</body>
</html>

------------------------------------------------------------------

Xml-filen kan hentes her:
http://www.daimi.au.dk/~u051207/danwater_homepage_text.xml

Det er et krav, at det er javascript, så forslag til brug af f.eks. php dur ikke... Hvis det var så let, så kunne jeg selv finde ud af det. :o)
Avatar billede olebole Juniormester
18. december 2008 - 15:13 #1
<ole>

Hvad sker? Hvad sker ikke? Hvad forventer du, skulle ske? Hvilke(n) browser(e) tester du i? Får du fejlmeldinger? Har du slået fejlmeldinger til/fra?

/mvh
</bole>
Avatar billede aitnemed Novice
18. december 2008 - 15:38 #2
Det som jeg forventer skulle ske er, at hjemmesiden når den loades viser:


Danwater

Welcome

Test: indlaes xml
Indholdstekst: This is the frontpage

Dvs. jeg forventer at ovenstående er resultatet af:

<body onload="parseXML()">
<h1>Danwater</h1>
<h1><span id="header"></span><br/></h1>
<p>
<b>Test:</b> <span id="test"></span><br />
<b>Indholdstekst:</b> <span id="normal_tekst"></span><br />
</p>
</body>

Dvs. at <span id="header"></span> skulle få værdien "Welcome" og <span id="normal_tekst"></span> skulle få værdien "This is the frontpage".
Avatar billede aitnemed Novice
18. december 2008 - 15:42 #3
Det som jeg ser, når jeg får hjemmesiden vist er følgende:

"
Danwater



Test: indlaes xml
Indholdstekst:
"

hvor
"Danwater

Welcome

Test: indlaes xml
Indholdstekst: This is the frontpage"
var forventet.

Som jeg tidligere skrev, så tester jeg i firefox og får ingen fejlmeldinger men er heller ikke bekendt med, hvordan jeg slår fejlmeldinger til fra i firefox - hvis det er det, som menes.
Avatar billede aitnemed Novice
18. december 2008 - 16:00 #4
Hvis der i firefox ikke angives fejlmeldinger andre steder end fejlkonsollen, så får jeg ikke nogen fejl, når jeg tester hjemmesiden i firefox. Fejlkonsollen er tom.
Avatar billede olebole Juniormester
19. december 2008 - 16:50 #5
Hvad sker der, hvis du sætter en alert ind forskellige steder og tjekker på, hvad dine variabler og objekter indeholder?
Avatar billede aitnemed Novice
19. december 2008 - 23:18 #6
Jeg har sat en alert ind som så:

------------------------------------------------------------------------------------
<html>
<head>
<script type="text/javascript">
function parseXML()
{
try //Internet Explorer
  {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  }
catch(e)
  {
  try //Firefox, Mozilla, Opera, etc.
    {
    xmlDoc=document.implementation.createDocument("","",null);
    }
  catch(e)
    {
    alert(e.message);
    return;
    }
  }
xmlDoc.async=false;
xmlDoc.load("danwater_homepage_text.xml");

alert(xmlDoc.getElementsByTagName('header')[0].childNodes[0].nodeName);

------------------------Koden fortsætter---------------------------------------------

Som jeg har forstået javascript, så burde dette returnere indholdet (Welcome) fra den første (og i denne xml eneste) childnode til den første "header"-node.

Her er den første del af xml-filen, som jeg forsøger at indlæse:

<?xml version="1.0" encoding="utf-8"?>
<text>    
    <english>
        <index>
            <header>
                <text_to_show>Welcome</text_to_show>
            </header>
            <normal_tekst>
                <text_to_show>This is the frontpage</text_to_show>
            </normal_tekst>
        </index>

Men i stedet for at få "Welcome", så får jeg "#text". Det er jo alletiders, at variablen ikke er tom, men jeg kan ikke gennemskue, hvorfor alerten returnerer "#text".
Avatar billede roenving Novice
31. december 2008 - 02:01 #7
.nodeName giver jo åbenbart typen og da denne ikke tolkes som en gyldig vises #text, som nok er en generisk værdi for text-noder ...

Får du ikke det rigtige, hvis du bruger .nodeValue ?-)
Avatar billede aitnemed Novice
01. januar 2009 - 14:05 #8
Nej desværre. Som det fremgår af koden i mit indledende spørgsmål, så startede jeg med at bruge .nodeValue, men det returnerer intet/en tom string.
Avatar billede olebole Juniormester
01. januar 2009 - 22:00 #9
Det kommer vel helt anpå, hvilken browser, du tester i  ;o)

Hvis browseren tæller white-space med, har din header node tre childNodes:

            <header> /* Her er en tom text node */
                <text_to_show>Welcome</text_to_show> /* <-- Der er en element node */
            </header> /* Her er en tom text node */

Prøv i stedet med:
    alert(xmlDoc.getElementsByTagName('header')[0].getElementsByTagName("text_to_show")[0].firstChild.nodeValue);
Avatar billede olebole Juniormester
01. januar 2009 - 22:02 #10
- men hvad er egentlig begrundelsen for dit 'text_to_show' element?
Avatar billede aitnemed Novice
02. januar 2009 - 00:21 #11
Tja, nu du nævner det, så er der egentligt ikke nogen fornuftig grund. Har ikke lige mulighed for at teste dit forslag nu, men kan forhåbentlig finde tid her til morgen/formiddag. Jeg tester i firefox, men må ærligt talt indrømme, at jeg ikke var klar over, at der kunne være forskel på, hvordan browsere håndterede XML. Troede at XML efterhånden var så standardiseret, så det ikke ville adskille sig.

Dvs. jeg troede, at koden

"document.getElementById("header").innerHTML=
xmlDoc.getElementsByTagName("header")[0].childNodes[0].nodeValue;"

ville hente det det første header-tag, og derefter via "childNodes[0]" få fat i text_to_show-tagget. Det var så min forventning, at et kald til nodeValue her, ville resultere i at indholdet ville blive vist.
Avatar billede olebole Juniormester
02. januar 2009 - 01:28 #12
I Firefox vil du sikkert kunne opnå det ønskede med childNodes[1] i stedet - mens din egen kode fungerer fint i Explorer.

Bruger man innerHTML - som aldrig har været valid i nogen somhelst standard - bør man dog nok ikke undre sig over forskelligheder mellem browsernes XML-håndtering, eller om de følger standarderne  ;o)
Avatar billede ghost1026 Nybegynder
06. april 2011 - 13:00 #13
alert(xmlDoc.getElementsByTagName('header')[0].getElementsByTagName("text_to_show")[0].firstChild.nodeValue);


Tak for denne her Ole bole..:o)
Har været ved at rive håret ud fordi FF opfører sig latterligt mht XML´en her..
Avatar billede aitnemed Novice
06. april 2011 - 13:19 #14
Wow, havde helt glemt at jeg havde den her åben stadig.

Olebole skriv endelig et svar, så får du selvfølgelig point.
Avatar billede olebole Juniormester
06. april 2011 - 13:43 #15
Hehe ... det er helt okay. Jeg samler ikke points, så du lægger bare selv svar og accepterer  *o)
Avatar billede aitnemed Novice
06. april 2011 - 13:58 #16
Spørgsmålet lukkes.
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