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?
Annonceindlæg fra Novataris
04. august 2008 - 13:49
#1
Hvordan ser det ukorrekte XML ud?
04. august 2008 - 14:25
#2
Sådan her:
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="
http://ETELLERANDET.org/"><?xml version="1.0" encoding="iso-8859-1"?><xml><node1>0</node1><node2>F</node2></xml></string>
04. august 2008 - 14:37
#3
Hmm. Jaeh. Altså du kan vel erstatte alle "<" med "<" og alle ">" 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?
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
04. august 2008 - 14:56
#5
Ja, så må vi replace. :)
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="<?xml version=\"1.0\" encoding=\"iso-8859-1\"?><xml><node1>0</node1><node2>F</node2></xml>"; s=replaceAll(s,"<","<"); s=replaceAll(s,">",">"); alert(s); </script>
04. august 2008 - 15:06
#7
Denne kode bruger funktionen replaceAll() til at erstatte først < og derefter >
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.
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"
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 !-)
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.
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(/</g,"<").replace(/>/g,">")}); var oDOM = xmlStr2dom(sXml); alert(oDOM.documentElement.nodeName); /mvh </bole>
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)
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(/</g,"<").replace(/>/g,">")}); Så vil den være ligeglad, hvis nodeName i det ydre XML dokuments dokument element ændres til andet end 'string'
04. august 2008 - 19:11
#15
w13 >> Du skal først have fjernet den rigtige XML, før du kan replace ;o)
04. august 2008 - 19:36
#16
Altså jeg gik ud fra, at mikmakmuk selv hev den korrekte del ud. =)
04. august 2008 - 22:23
#17
Jamen, det skal han vel også have en løsning til =)
09. august 2008 - 16:27
#18
Er du kommet videre?
Vi tilbyder markedets bedste kurser inden for webudvikling