Avatar billede starleicht Nybegynder
13. januar 2004 - 09:59 Der er 29 kommentarer og
1 løsning

XML error/Simpel RSS reader

Med udgangspunkt i nedenstående artikel:

http://www.html.dk/scripts/asp/00020/

...har jeg forsøgt at vise en xml-fil (http://www.tips.dk/xml/denlange.xml) men får følgende fejl:

"XML error: The element 'Den_lange' is used but not declared in the DTD/Schema."

Hvordan får jeg vist xml-filen korrekt?
Avatar billede nute Nybegynder
13. januar 2004 - 10:09 #1
<!DOCTYPE Den_lange> ??? hvorfor har du den linje med ???

/nute
Avatar billede starleicht Nybegynder
13. januar 2004 - 10:11 #2
xml-filen leveres af Dansk Tipstjeneste, så den er som den er!

MVH StarLeicht
Avatar billede nute Nybegynder
13. januar 2004 - 10:24 #3
hmm... xml-filen er jo ikke valid. den mangler at blive knyttet op mod en dtd.

Elementet <!DOCTYPE Den_lange> burde se ud som noget ála dette:

<!DOCTYPE Den_lange SYSTEM "http://www.tips.dk/xml/denlange.dtd">

/nute
Avatar billede nute Nybegynder
13. januar 2004 - 10:26 #4
du kan jo eventuelt fjerne denne linje inden du laster den ind i dit DOM objekt ... så vil den kunne køre. men det er jo lidt trist at tips.dk ikke kan lave en valid xml ;-)
Avatar billede starleicht Nybegynder
28. februar 2004 - 15:35 #5
Jeg bruger nedenstående script til at transformere tipstjenestens xml-dokument, men det virker kun hvis jeg gemmer denlange.xml lokalt, og fjerner linien med DOCTYPE

Jeg vil selvfølgelig gerne bruge online-versionen af xml-dokumentet. Kan DOCTYPE-linien udkommenterer eller fjernes vha. javascriptet??

<script type="text/javascript">// Load XML
var xml = new ActiveXObject("Microsoft.XMLDOM")
xml.async = false
xml.load("denlange.xml")
//xml.load("http://www.tips/xml/denlange.xml")

// Load XSL
var xsl = new ActiveXObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load("template_Den_lange.xsl")

// Transform
document.write(xml.transformNode(xsl))</script>
Avatar billede nute Nybegynder
28. februar 2004 - 18:30 #6
du kan ikke fjerne doc-type, da dette er en read-only property på et XML DOM objekt. det du kan gøre, er at prøve at hive fat i dokumentet ved hjælp af ASPHttp, eller noget lignende, serverside, og fjerne doc-type linjen *inden* du laster ind i DOM objekt

/nute
Avatar billede starleicht Nybegynder
29. februar 2004 - 13:44 #7
Kan du give et eksempel? Jeg smider gerne lidt flere point på spørgsmålet!
Avatar billede starleicht Nybegynder
29. februar 2004 - 14:06 #8
Jeg bruger det her script, p.t. med en "lokal" version af denlange.xml, og det virker fint.

<%
'Load XML
extURL = "http://www.leicht.dk/xml/denlange.xml"
'extURL = "http://www.tips/xml/denlange.xml"

set xmlDoc = createObject("Msxml.DOMDocument")
xmlDoc.async = false
xmlDoc.setProperty "ServerHTTPRequest", true
xmlDoc.load(extURL)

'Load XSL
set xsl = Server.CreateObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load(Server.MapPath("template_Den_lange.xsl"))

'Transform file
Response.Write(xmlDoc.transformNode(xsl))
%>
Avatar billede nute Nybegynder
29. februar 2004 - 14:56 #9
hmm ... den kode du har postet fungerer fint for mig. den eneste fejl, er at du mangler ".dk" i din URL:

extURL = "http://www.tips/xml/denlange.xml"

skal være

extURL = "http://www.tips.dk/xml/denlange.xml"

/nute
Avatar billede starleicht Nybegynder
01. marts 2004 - 11:22 #10
Tjah, jeg kan nu ikke få den til at virke, også selvom ".dk" er med....
Men har lige fundet ud af, at jeg SKAL bruge en client-side løsning, og arbejder med nedenstående. Kan man loade en ekstern xml-fil vha. javascript? - Og så har jeg læst noget om at man kan fjerne <!DOCTYPE deklarationen vha. XLST, men har ikke fået det til at virke (http://www.biglist.com/lists/xsl-list/archives/200104/msg00629.html)

// Load XML
var xml = new ActiveXObject("Microsoft.XMLDOM")
xml.async = false
xml.load("denlange.xml")
// Virker ikke //xml.load("http://www.tips.dk/xml/denlange.xml")

// Load XSL
var xsl = new ActiveXObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load("template_Den_lange.xsl")

// Transform
document.write(xml.transformNode(xsl))
</script>

Link til løsning:
http://www.leicht.dk/xml/denlange.html
http://www.leicht.dk/xml/template_Den_lange.xsl
http://www.leicht.dk/xml/denlange.xml
Avatar billede nute Nybegynder
01. marts 2004 - 11:36 #11
hvorfor *skal* du bruge client-side løsning ? kan du være sikker på at alle som skal se din side har en XML-parser installeret ? Det sikreste ville være at lave det serverside.

Problemet er jo nettop at dit DOM object ikke vil laste ind xml'en fordi den ikke er valid. Så er det jo lige meget om du via XSL kan fjerne DOCTYPE, så hjælper det dig ikke noget. Du er nødt til at laste ind XML-dokumentet inden du kan transformere via XSL.

/nute
Avatar billede starleicht Nybegynder
22. marts 2004 - 13:05 #12
Ved ikke at fjerne validering, så der ikke ledes efter DTD'en lykkede det, dvs:

<%
'Load XML
extURL = "http://www.tips.dk/xml/denlange.xml"

set xmlDoc = createObject("Msxml.DOMDocument")
xmlDoc.async = false
xmlDoc.validateOnParse = false
xmlDoc.setProperty "ServerHTTPRequest", true
xmlDoc.load(extURL)

'Load XSL
set xsl = Server.CreateObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load(Server.MapPath("template_Den_lange.xsl"))

'Transform file
Response.Write(xmlDoc.transformNode(xsl))
%>

Men, nu opstår der så et andet problem: Specialtegn vises forkert:

Tvis - AaB H&#23460;bold (Tvis - AaB Håbold)
FC K?- Stuttgart (FC Köln- Stuttgart)
OB - Br? (OB - Brøndby)

Skal jeg bruge evt. Server.HTMLEncode, og i givet fald hvor??
Avatar billede nute Nybegynder
22. marts 2004 - 14:21 #13
ahh ... smart nok ... den propertien kendte jeg ikke til :-]

du får nok underlige tegn fordi xml'en ikke er encodet ordentlig. Det er da røvsygt at tips.dk ikke kan lave en ordentlig XML ... GRR !!! :-)

du kan prøve at lægge encoding på, med denne stump kode

Dim pi : Set pi = xmldoc.createProcessingInstruction("xml"," version='1.0' encoding='ISO-8859-1'")
xmldoc.appendChild(pi)

Jeg har ikke testet dette selv, så jeg ved ikke hvordan det vil fungere.

/nute
Avatar billede starleicht Nybegynder
22. marts 2004 - 14:33 #14
Altså så'en:

<%
'Load XML
extURL = "http://www.tips.dk/xml/denlange.xml"

set xmlDoc = createObject("Msxml2.DOMDocument")
xmlDoc.async = false
xmlDoc.validateOnParse = false

xmlDoc.setProperty "ServerHTTPRequest", true
xmlDoc.load(extURL)

'Load XSL
set xslDoc = Server.CreateObject("Microsoft.XMLDOM")
xslDoc.async = false
xslDoc.load(Server.MapPath("template_Den_lange.xsl"))

'Transform file
Dim pi
Set pi = xmldoc.createProcessingInstruction("xml"," version='1.0' encoding='ISO-8859-1'")
xmldoc.appendChild(pi)

Response.Write (xmlDoc.transformNode(xslDoc))
%>

---> Det gør ingen effekt!?
Avatar billede nute Nybegynder
22. marts 2004 - 14:56 #15
hmm ... har du sat encoding på dit xsl ?
Avatar billede starleicht Nybegynder
22. marts 2004 - 15:11 #16
>>har du sat encoding på dit xsl?
-> jepper!

Men vi er vel enige om at jeg skal finde en kode, så jeg på min asp side kan sætte encodingen, og jeg skal vel bruge den der hedder "iso-8859-1" ?!
Avatar billede nute Nybegynder
22. marts 2004 - 15:19 #17
hmm ... jo, vi er enige om at du skal angive encodingen fra din asp side, og du skal bruge den der hedder ISO-8859-1.

det du kan prøve, er at laste dokumentet ind i et ny dokument hvor du har sat encodingen via 'createProcessingInstruction'

set xmlDoc = createObject("Msxml2.DOMDocument")
set xmlDocEncoded = createObject("Msxml2.DOMDocument")

xmlDoc.async = false
xmlDoc.validateOnParse = false

xmlDoc.setProperty "ServerHTTPRequest", true
xmlDoc.load(extURL)

Dim pi
Set pi = xmlDocEncoded.createProcessingInstruction("xml"," version='1.0' encoding='ISO-8859-1'")
xmlDocEncoded.appendChild(pi)
xmlDocEncoded.appendChild( xmlDoc.documentElement )

måske ? Det blir nogle skud fra hoften her ... har desværre ikke så meget tid til at teste

/nute
Avatar billede nute Nybegynder
22. marts 2004 - 15:22 #18
eller ... det er jo strengt taget ikke nødvendig ... du kan jo bare læse ind et dokument med den korrekte encoding:

xmlDocEncoded.loadXML( "<?xml version=""1.0"" encoding=""ISO-8859-1""?>" )

/nute
Avatar billede starleicht Nybegynder
22. marts 2004 - 15:22 #19
Nej, desværre ikke...
Avatar billede starleicht Nybegynder
22. marts 2004 - 15:25 #20
hmm, hvor skal

xmlDocEncoded.loadXML( "<?xml version=""1.0"" encoding=""ISO-8859-1""?>" )

placeres i scriptet?
Avatar billede nute Nybegynder
22. marts 2004 - 15:27 #21
i stedet for linien 'Set pi = xmlDocEncoded.createProcessingInstruction("xml"," version='1.0' encoding='ISO-8859-1'")'
Avatar billede nute Nybegynder
22. marts 2004 - 15:31 #22
gider du at gøre din xsl tilgængelig for mig, så jeg kan kigge på det ?
Avatar billede starleicht Nybegynder
22. marts 2004 - 15:36 #23
Avatar billede starleicht Nybegynder
22. marts 2004 - 15:39 #24
Smutter hjem nu.
Jeg glæder mig til at se hvad du hitter ud af, og jeg smider gerne lidt point oven i for indsatsen.

:-) StarLeicht
Avatar billede nute Nybegynder
22. marts 2004 - 15:52 #25
ehh ... hmm ... jeg får ikke læst ind xml'en med den kode du postet @ 22/03-2004 13:05:05 :-(

men jeg kan ikke helt forstå hvorfor det skal give problemer for dig ... jeg ser at både xml'en og xsl'en har encoding på. Men jeg får ikke kørt transformationen fordi jeg ikke får læst ind dokumentet. Jeg bruger nøjagtig den kode du har postet ... mystisk !!

/nute
Avatar billede starleicht Nybegynder
22. marts 2004 - 18:19 #26
ja, meget mystisk.....
Avatar billede starleicht Nybegynder
25. marts 2004 - 21:39 #27
Fandt en løsning!
Denne linie tilføjes øverst i min xsl-fil:
<xsl:output method="xml" version="1.0" encoding="ISO-8859-1"/>

...og vupti, så var den der!
Avatar billede starleicht Nybegynder
25. marts 2004 - 21:42 #28
nute: Hvis du svarer får du pointene :-)
Avatar billede nute Nybegynder
25. marts 2004 - 21:50 #29
det var da godt du fandt en løsning. Det der forundrer mig, dog, er at transformationen kørte fint for mig, og ikke for dig. Jeg var inde på tanken om at denne linie skulle med, men kan ikke  helt se hvorfor, når du alligevel havde en <?xml?> deklaration i toppen. måske det er noget jeg mangler noget viden om :-)

/nute
Avatar billede nute Nybegynder
25. marts 2004 - 21:55 #30
takker for points :-)
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
Kurser inden for grundlæggende programmering

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