Avatar billede hagler Nybegynder
25. september 2007 - 19:54 Der er 24 kommentarer og
1 løsning

Problem med læsning af XML dokument

Jeg har følgende script der skal kunne læse flere XML dokumenter og har der for et array som bliver går gennem en lykke, men det er kun det først XML der bliver afviklet og ikke alle 3...

Masse af point til den der løser mit dejlige probllem :o)

Scriptet:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Untitled Page</title>
    <script language="javascript">
function loadXMLDoc(dname)
{
var xmlDoc;
// code for IE
if (window.ActiveXObject)
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
}
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument)
{
xmlDoc=document.implementation.createDocument("","",null);
}
else
{
alert('Your browser cannot handle this script');
}
xmlDoc.async=false;
xmlDoc.load(dname);
return(xmlDoc);
}

function getxml (str) {
    xmlDoc=loadXMLDoc(str);
    var x=xmlDoc.getElementsByTagName('title');
    for (i=0;i<x.length;i++)
    {
      if ((x[i].nodeType!=3)&&(x[i].nodeType!=8))
        {
            document.write(x[i].nodeName+":::")
            document.write(x[i].childNodes[0].nodeValue)
            document.write("<br />")
        }
    }
}
    </script>
</head>
<body>
<script language="javascript">
var MultiArray = new Array()
MultiArray[0] = "test1.xml"
MultiArray[1] = "test2.xml"
MultiArray[2] = "test3.xml"

for (i=0;i<MultiArray.length;i++) {
    document.write(getxml(MultiArray[i]))
}
</script>
</body>
</html>
Avatar billede kalp Novice
25. september 2007 - 19:59 #1
kan det være dokumenterne der er forskel på?
for hvis deres indhold er der og de findes så bør den jo gerne fungerer
Avatar billede olebole Juniormester
25. september 2007 - 20:01 #2
<ole>

Hver document.write overskiver jo dokumentet  :)

/mvh
</bole>
Avatar billede olebole Juniormester
25. september 2007 - 20:02 #3
- og det betyder, at scriptet ikke længere eksisterer, når første XML-fil er kørt
Avatar billede kalp Novice
25. september 2007 - 20:03 #4
olebole >> hmm.. jeg kørte en simpel test netop for at tjekke for det, men hos mig står tingene bare ved siden af hinanden:/

burde måske have testet i Firefox hvilket jeg lige hurtigt gør!
Avatar billede kalp Novice
25. september 2007 - 20:05 #5
olebole >>

hmm.. nej det fungerer også i firefox hos mig..

testede med nedenstående.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script>
function doit()
{
document.write("1");
document.write("2");
}
</script>
</HEAD>

<BODY onload="doit();">

</BODY>
</HTML>
Avatar billede olebole Juniormester
25. september 2007 - 20:08 #6
kalp >> Din kode skal ganske korrekt fungere, men det er ikke det samme, som spørgseren skriver  :)

Derudover har document.write _absolut_ intet at gøre i et XHTML-dokument. Nu er vi jo i den situation, at XHTML ikke er understøttet på WWW, så der sker ikke så meget ved det - men rammer dokumentet ved et uheld en browser, der understøtter XHTML, vil den gå ned med en XML-fejl.

Så kan man argumentere for, at det slet ikke burde betyde noget, da XHTML 1.0 Transitional ikke har noget med XHTML at gøre (udover de lukkede tags) og altid vil parses som HTML  ;o)
Avatar billede olebole Juniormester
25. september 2007 - 20:09 #7
hagler >> Hvordan skal det bruges?
Avatar billede kalp Novice
25. september 2007 - 20:19 #8
okay olebole:) man må sige der er meget viden, at hente;)

en løsning ville vel være.

var newdocument = "";
for (i=0;i<MultiArray.length;i++) {
    newdocument += getxml(MultiArray[i]);
}
document.write(newdocument)
Avatar billede hagler Nybegynder
25. september 2007 - 20:30 #9
Tak kalp for dit seneste forslag, men dette virker heller ikke korrekt...

Det er min "for" løkke her, der ikke virker...
for (i=0;i<MultiArray.length;i++) {
    document.write(getxml(MultiArray[i]))
}

Den retunere: indholdet kun af test1.xml


meninger var at den skulle retunere indholdet af alle XML filer i "MultiArray" lige som kaldet af følgende gør.... men dette gør ikke min side dynamisk hvis jeg nu skulle tilføje eller fjerne XML filer...
document.write(getxml(MultiArray[0]))
document.write(getxml(MultiArray[1]))
document.write(getxml(MultiArray[2]))
Avatar billede olebole Juniormester
25. september 2007 - 20:33 #10
hagler >> Jeg er nødt til at spørge igen: Til hvad - og hvordan - skal du bruge det?
Avatar billede olebole Juniormester
25. september 2007 - 20:35 #11
PS: og for at tydeliggøre mit spørgsmål, så er det ikke muligt at lave en generisk funktion, der kan smide indhold af XML ind i JS-arrays. Vi er også nødt til også at kende den nøjagtige struktur af XML-filerne
Avatar billede hagler Nybegynder
25. september 2007 - 20:40 #12
Jeg skal liste XML Dokumenter i en mappe og trække titlen ud, hvorefter brugere skal kunne åbne XML filen og få vist indholdet.

Men antallet af XML filer kan variere.
Avatar billede olebole Juniormester
25. september 2007 - 20:44 #13
Hvis jeg nu bad dig putte indholdet af de blade, jeg har liggende foran mig ind i et array - hvad tror du så, du ville spørge efter?
Avatar billede kalp Novice
25. september 2007 - 20:44 #14
:D
Avatar billede hagler Nybegynder
25. september 2007 - 20:46 #15
alle mine XML filer 1-3 ser lige nu således ud...

<?xml version="1.0" encoding="utf-8" ?>
<notes>
  <item>
    <title>Indhold af test1 - test1</title>
    <description>descrip</description>
  </item>
  <item>
    <title>Indhold af test1 - test2</title>
    <description>descrip</description>
  </item>
  <item>
    <title>Indhold af test1 - test3</title>
    <description>descrip</description>
  </item>
</notes>

Problemet er er at få listet mine XML filer med lidt af indholdet, f.eks title og description.
Avatar billede hagler Nybegynder
25. september 2007 - 20:48 #16
Nu er det jo ikke indholdet der er problemet når jeg godt kan liste alle XML filerne en efter en med

document.write(getxml(MultiArray[0]))
document.write(getxml(MultiArray[1]))
document.write(getxml(MultiArray[2]))

jeg kan bare ikke gøre det via min løkke hvorfor? og det skal løses.
Avatar billede kalp Novice
25. september 2007 - 21:01 #17
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Untitled Page</title>
    <script language="javascript">
function loadXMLDoc(dname)
{
var xmlDoc;
// code for IE
if (window.ActiveXObject)
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
}
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument)
{
xmlDoc=document.implementation.createDocument("","",null);
}
else
{
alert('Your browser cannot handle this script');
}
xmlDoc.async=false;
xmlDoc.load(dname);
return(xmlDoc);
}

function getxml (str) {
alert(str);
    xmlDoc=loadXMLDoc(str);
    var text = "";
    var x=xmlDoc.getElementsByTagName('title');
    for (i=0;i<x.length;i++)
    {
      if ((x[i].nodeType!=3)&&(x[i].nodeType!=8))
        {
            text +=  x[i].nodeName+":::";
            text +=  x[i].childNodes[0].nodeValue;
            text += "<br />";
        }
    }
    return text;
}
    </script>
</head>
<body>
<script language="javascript">
var MultiArray = new Array()
MultiArray[0] = "test1.xml";
MultiArray[1] = "test2.xml";
MultiArray[2] = "test3.xml";
var counter = 0;
var newdocument = "";
do
{
  newdocument += getxml(MultiArray[counter]);
    counter++;
}
while(counter < MultiArray.length){
}
document.write(newdocument);
</script>
</body>
</html>
Avatar billede kalp Novice
25. september 2007 - 21:22 #18
ps. der er en alert(str);
som du kan fjerne selvfølgelig:)
det var bare i min test for at se hvor mange gange den blev kaldt.
Avatar billede olebole Juniormester
25. september 2007 - 21:31 #19
hagler >> "Nu er det jo ikke indholdet der er problemet" >> Som du nok kan se ud fra kalp's løsningsforslag, er indholdet altafgørende for en løsning. Når du stiller et spørgsmål på Eksperten, så gå altid udfra, du ikke ved, hvad der er nødvendigt for en løsning  ;o)
Avatar billede kalp Novice
25. september 2007 - 21:37 #20
olebole >> helt enig:) som jeg også skriver på mit minisite;)

jeg arbejder bedst med problemet i egne hænder - ellers havde jeg nok heller ikke lige gennemskuet den - javascript er ikke det jeg arbejder med hele tiden:)
Avatar billede hagler Nybegynder
25. september 2007 - 22:02 #21
Tak for hjælpen kalp. send et svar så for du dine Points.

olebole >> Du kan jo se på løsningen det ikke var noget med XML data at gøre, hvilket også er helt logik når jeg kan hive ud også så er det jo ligemeget om det er en tegneserie. Jo indholdet er altafgørende men ikke lige i denne sag, hvor en løkke ikke ville virke som forventet.
Avatar billede kalp Novice
25. september 2007 - 22:04 #22
Du får svaret her:)
Avatar billede olebole Juniormester
25. september 2007 - 22:22 #23
hagler >> Sorry, men jeg prøvede blot at komme det sædvanlige halve dusin opfølgnings spørgsmål i forkøbet, der erfaringsmæssigt kommer ud af et JS/XML-spørgsmål. Det var åbenbart for en gangs skyld overflødigt i dette tilfælde  ;o)

Desuden kom jeg lige fra et spørgsmål, stillet af en sprøjtende, dobbeltsidig hjerneblødning - hvilket tydeligvis smittede af. Sorry  :)
Avatar billede hagler Nybegynder
25. september 2007 - 22:34 #24
Kender kun de spørgsmål alt for godt.
Men tak for din indsats alligevel altid rart med folk der vil hjælpe en mand i nød med hans programering.
Avatar billede olebole Juniormester
25. september 2007 - 22:50 #25
Selvtak  ;o)
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