Avatar billede keutmann Nybegynder
21. november 2001 - 14:39 Der er 8 kommentarer og
1 løsning

Valider en XML fil med et DTD dokument via en parameter (Msxml og ASP)

Jeg har en xml fil som jeg gerne vil parse med en tilhørende DTD fil ved hjælp af Msxml3.0 (eller 4.0)

Når jeg loader xml filen i min XMLDom, kan jeg godt parse xml filen med DTD\'en hvis DTD\'en stå som en reference i xml dokumentet.

Men jeg kan ikke se hvordan man kan angive en DTD via en parameter istedet og stadig få valideret xml dokumentet ved load.

Help please :-)
Avatar billede kresten Nybegynder
21. november 2001 - 15:06 #1
Interessant spørgsmål :) Jeg skal faktisk selv bruge det og mit umiddelbare gæt er at du i den XML fil skriver f.eks.

<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>

<!DOCTYPE item SYSTEM \"D:\\webprojects\\myProjekt\\mydtd.dtd\">

... men jeg vender frygelig tilbage når jeg har leget lidt med XMLDOM\'en :)
Avatar billede kresten Nybegynder
21. november 2001 - 15:32 #2
set XMLDOM = server.CreateObject(\"MSXML2.DOMDocument\")
xml = \"<!DOCTYPE item SYSTEM \"\"D:\\webprojects\\myProject\\myDTD.dtd\"\"><xmlDims></xmlDims>\"

XMLDOM.validateOnParse = \"true\"
XMLDOM.loadXML(xml)

Response.Write \"<br>errorCode : \" & XMLDOM.parseError.errorCode
Response.Write \"<br>filepos: \" & XMLDOM.parseError.filepos
Response.Write \"<br>line: \" & XMLDOM.parseError.line 
Response.Write \"<br>linepos: \" & XMLDOM.parseError.linepos
Response.Write \"<br>reason: \" & XMLDOM.parseError.reason
Response.Write \"<br>srcText: \" & XMLDOM.parseError.srcText
Response.Write \"<br>url: \" & XMLDOM.parseError.url

Response.Write \"<p>Valideret XML<br>\" & server.HTMLEncode(XMLDOM.xml)
Avatar billede kresten Nybegynder
21. november 2001 - 15:35 #3
Ovenstående tager XMLen der ligger i text strengen xml og validerer den ud fra det DTD du har lavet. I mit tilfælde ligger den på D:\\webprojects\\myProject\\myDTD.dtd

Da det kun er research laver den ikke noget fancy, men skriver altid fejlen (hvis der er en) og så XMLen ud i browseren.

Ret nemt, men spørg hvis der er mere du vil vide?
Avatar billede Slettet bruger
21. november 2001 - 15:44 #4
kresten: Er du ikke nødt til at sætte xmlfilens root-element ind dér hvor du har \"item\" stående?
Avatar billede kresten Nybegynder
21. november 2001 - 15:49 #5
greystate: Jo du har helt ret! Det er fordi jeg brugte noget andet XML fra arbejde som er \"hemmeligt\" :)

Godt set!
Avatar billede Slettet bruger
21. november 2001 - 16:02 #6
Gem denneher som \"dtdtest.asp\", og kald den med: dtdtest.asp?xml=[filnavn]&dtd=[filnavn]


<%@language=\"jscript\" %>
<%// Response.ContentType = \"text/xml\";

var rq = Request.QueryString;

var xmlfile = String(rq(\"xml\"));
var dtdfile = String(rq(\"dtd\"));

var xml = Server.CreateObject(\"MSXML2.DOMDocument\");

xml.async = false;
xml.validateOnParse = false;

xml.load(Server.MapPath(xmlfile));

var rootName = xml.documentElement.nodeName;

var newXML = \'<!DOCTYPE \' + rootName + \' SYSTEM \"\' + Server.MapPath(dtdfile) + \'\">\' + xml.documentElement.xml;

xml.validateOnParse = true;
xml.loadXML(newXML);

%>
<% if (xml.parseError) { %>
<%= xml.parseError.reason %>
<% } else { %>
<%= newXML %>
<% } %>

/CS
Avatar billede keutmann Nybegynder
22. november 2001 - 23:49 #7
OK! greystate
Det virker, men det er ikke smukt.
Men der er vist ingen anden vej uden om :-(
Det er vist kun Schema man kan sætte som parameter! (Har ikke set nærmere på det)

Ellers mange tak :-)
Avatar billede Slettet bruger
23. november 2001 - 18:31 #8
Man kan jo ikke forvente at custom-kode er smukt, når det laves i en fart, vel :-)

/CS
Avatar billede keutmann Nybegynder
26. november 2001 - 09:38 #9
Jeg mente ikke at det var kodet grimt, men at man ikke kunne løse problemet på en lidt anden smartere måde.

Keutmann :-)



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