Avatar billede dennish Nybegynder
14. december 2009 - 16:42 Der er 1 kommentar og
1 løsning

læsning af XML dokument i JavaScript via load metoden

Hejsa

Hvordan får jeg læst et xml dokument i JavaScript via load metoden ? Jeg har følgende kode:
employee.xml (ligger i C:\temp\demo)
<?xml version="1.0" encoding="UTF-8" ?>
    <company>
        <employee id="001" >John</employee>
        <turnover>
            <year id="2000">100,000</year>
            <year id="2001">140,000</year>   
            <year id="2002">200,000</year>
        </turnover>
</company>
mit java script ser således ud:

var xmlDoc;
function init() {
    xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    loadXML('C:\temp\demo\employee.xml');
        alert(xmlObj.xml);
}

function loadXML(xmlFile) {
  xmlDoc.async="false";
  xmlDoc.onreadystatechange=verify;
  xmlDoc.load(xmlFile);
  xmlObj=xmlDoc.documentElement;
}

function verify() {
  // 0 Object is not initialized
  // 1 Loading object is loading data
  // 2 Loaded object has loaded data
  // 3 Data from object can be worked with
  // 4 Object completely initialized
  if (xmlDoc.readyState != 4) {
      return false;
  }
}

Min html kode ser således ud:
<td>
<INPUT type="BUTTON" value="Test"  ONCLICK="init()">
<INPUT type="text" name="dyn" id="dyn" value="">
</td>

Mit spørgsmål er følgende:
Hvordan får jeg læst mit xml dokument eller tjekket om jeg har fået det loadet ?. Er min sti reference korrekt ?
Avatar billede tjens Nybegynder
15. december 2009 - 14:38 #1
Jeg har en lille "Husk Genveje" applikation, hvor der loades xml med microsoft-XMLDOM.
Du kan downloade program og xml her:
http://tjens.dk/javascript/examples/myButtons/myButtons.hta
http://tjens.dk/javascript/examples/myButtons/myButtons.xml
og teste på din egen PC.

Den del af koden du efterspørger ser sådan her ud i mit eksempel:
function init() {
    mainDiv = document.getElementById("mainDivID");
    var xmlFileName = "myButtons.xml";

    xml = new ActiveXObject("Microsoft.XMLDOM");
    xml.async = false;
    xml.load( xmlFileName) ;
    if (!xml.parseError.errorCode == 0)
    {
        mainDiv.appendChild(document.createTextNode(xml.parseError.url + ': ' + xml.parseError.reason) );     
            return;
    }
    if (xml.selectNodes("rootTag").length == 0)
    {
        mainDiv.appendChild(document.createTextNode('No <rootTag> tag found in  file ' + xmlFileName));     
        return;
    }
    showButtons();
}


Men husk på at du ikke kan lave en HTML/javascript side, som hentes fra en webserver, og som samtidig har adgang til harddisken lokalt.

Jeg en lokal .HTA fil i dette tilfælde, fordi det egentlig er et klientprogram jeg har lavet. Det er bare HTML og javascript der udgør programmet.
Avatar billede dennish Nybegynder
18. december 2009 - 16:51 #2
Endte op med følgende kode:

var browserName;
var oXml;

function init() {
    setBrowser();
    createXMLRequestObject();
    loadXMLSource();
}
function setBrowser(){
    browserName = navigator.appName;
}

function createXMLRequestObject() {
    browserName = navigator.appName;
    if (browserName == "Netscape") {
        oXml = new XMLHttpRequest();
    }   
    if (browserName == "Microsoft Internet Explorer") {
        oXml = new ActiveXObject("Msxml2.DOMDocument.3.0");
        if (oXml == undefined) {
            oXml = function() {
                try {
                    return new ActiveXObject("Msxml2.XMLHTTP.6.0");
                } catch (e) {
                }
                try {
                    return new ActiveXObject("Msxml2.XMLHTTP.3.0");
                } catch (e) {
                }
                try {
                    return new ActiveXObject("Msxml2.XMLHTTP");
                } catch (e) {
                }
                try {
                    return new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {
                }
                throw new Error("This browser does not support XMLHttpRequest.");
            };
        }
    }
}
function loadXMLSource() {
    var XMLSource = http://localhost:8080/minApp/minXmlFil.xml
    try {
        if (browserName == "Netscape") {
            oXml.open('GET',XMLSource ,true);
            oXml.onreadystatechange=callback;
            oXml.send(null);
        }
        if (browserName == "Microsoft Internet Explorer") {
            oXml.load(XMLSource );
            oXml.onreadystatechange=callback;       
        }
    } catch (e) {
        alert("XML kunne ikke ?bnes:" +e);
    }
}
function callback() {
    if (oXml.readyState==4) {
        run();
      }   
}
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

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