Avatar billede mikmakmuk Nybegynder
04. august 2008 - 13:47 Der er 17 kommentarer og
1 løsning

ajax helvede

Hej Eksperter,

Jeg har et herligt lille problem. Har et objekt
oHttp.responseXML.documentElement

Problemet er at indholdet IKKE er korrekt xml, hvilket vil sige det er encoded. Har jeg nogen mulighed for at unendode det?
Avatar billede w13 Novice
04. august 2008 - 13:49 #1
Hvordan ser det ukorrekte XML ud?
Avatar billede mikmakmuk Nybegynder
04. august 2008 - 14:25 #2
Sådan her:

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://ETELLERANDET.org/">&lt;?xml version="1.0" encoding="iso-8859-1"?&gt;&lt;xml&gt;&lt;node1&gt;0&lt;/node1&gt;&lt;node2&gt;F&lt;/node2&gt;&lt;/xml&gt;</string>
Avatar billede w13 Novice
04. august 2008 - 14:37 #3
Hmm. Jaeh. Altså du kan vel erstatte alle "&lt;" med "<" og alle "&gt;" med ">".

Men hvis du har mulighed for at ændre i dit XML-dokument, så kan du vel også bare vælge at skrive dit XML i en CDATA-node?
Avatar billede mikmakmuk Nybegynder
04. august 2008 - 14:50 #4
det er jo lige det. Hvordan slipper jeg afsted med det. Jeg har ingen mulighed for at ændre i xml dokumentet
Avatar billede w13 Novice
04. august 2008 - 14:56 #5
Ja, så må vi replace. :)
Avatar billede w13 Novice
04. august 2008 - 15:06 #6
Du kan måske bruge følgende:

<script type="text/javascript">
function replaceAll(sString,sReplace,sWith){
    while(sString.indexOf(sReplace)>-1)sString=sString.replace(sReplace,sWith);
    return sString;
}

var s="&lt;?xml version=\"1.0\" encoding=\"iso-8859-1\"?&gt;&lt;xml&gt;&lt;node1&gt;0&lt;/node1&gt;&lt;node2&gt;F&lt;/node2&gt;&lt;/xml&gt;";

s=replaceAll(s,"&lt;","<");
s=replaceAll(s,"&gt;",">");

alert(s);
</script>
Avatar billede w13 Novice
04. august 2008 - 15:06 #7
Denne kode bruger funktionen replaceAll() til at erstatte først &lt; og derefter &gt;
Avatar billede w13 Novice
04. august 2008 - 15:07 #8
Ikke at det bliver objekter af den grund, men så har du det i det mindste i ordentlig tekstform.
Avatar billede mikmakmuk Nybegynder
04. august 2008 - 16:10 #9
Hvis jeg gør det så kan jeg jo ikke sige

xmlDoc.getElementsByTagName("node1")[0].childNodes[0].nodeValue=="bla"
Avatar billede roenving Novice
04. august 2008 - 16:41 #10
-- og w13s kode kan forkortes ved at bruge en regExp:

function replaceAll(sString,sReplace,sWith){
    return sString.replace(new RegExp(sReplace,"g"), sWith);
}

-- og nej, men så kan du parse den !-)
Avatar billede w13 Novice
04. august 2008 - 17:24 #11
mikmakmuk>> Nej, som Roenving siger, så kan du ikke sådan uden videre arbejde med det, som om det var tags. Du vil i så fald skulle bygge en parser, som kan opbygge XML-tagsene igen, når min kode har givet dig dem som string.
Avatar billede olebole Juniormester
04. august 2008 - 19:01 #12
<ole>

- og for at lette byggeriet, kunne man jo vælge at bruge prefabrikerede elementer, så alle de fleste være med  :)

function xmlStr2dom(sXml) {
    var oXmlDoc = null;
    if (window.DOMParser) {
        var oParser = new DOMParser();
        oXmlDoc = oParser.parseFromString(sXml, "text/xml");
    } else {
        oXmlDoc = new ActiveXObject("Msxml2.DOMDocument.3.0");
        oXmlDoc.async = false;
        oXmlDoc.loadXML(sXml);
    }
    return oXmlDoc;
}

var sXml = oHttp.responseText.replace(/<\?xml(?:.*?)<string(?:.*?)>(.*?)<\/string>/ig, function($1,$2){return $2.replace(/&lt;/g,"<").replace(/&gt;/g,">")});
var oDOM = xmlStr2dom(sXml);
alert(oDOM.documentElement.nodeName);

/mvh
</bole>
Avatar billede olebole Juniormester
04. august 2008 - 19:03 #13
"... så alle de fleste være med" - var en overdrivelse, som blev forsøgt nedtonet ... hvilket åbenbart kun lykkedes halvt  :o|

"... så de fleste kan være med" - skulle der stå  ;o)
Avatar billede olebole Juniormester
04. august 2008 - 19:08 #14
- og regExp'en kan også skrives:
    var sXml = oHttp.responseText.replace(/<\?xml(?:.*?)<(?:.*?)>(.*?)<\/(?:.*?)>/ig, function($1,$2){return $2.replace(/&lt;/g,"<").replace(/&gt;/g,">")});

Så vil den være ligeglad, hvis nodeName i det ydre XML dokuments dokument element ændres til andet end 'string'
Avatar billede olebole Juniormester
04. august 2008 - 19:11 #15
w13 >> Du skal først have fjernet den rigtige XML, før du kan replace  ;o)
Avatar billede w13 Novice
04. august 2008 - 19:36 #16
Altså jeg gik ud fra, at mikmakmuk selv hev den korrekte del ud. =)
Avatar billede olebole Juniormester
04. august 2008 - 22:23 #17
Jamen, det skal han vel også have en løsning til  =)
Avatar billede olebole Juniormester
09. august 2008 - 16:27 #18
Er du kommet videre?
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