PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : .net - XML gegen DTD validieren


Coreyl
03.04.2006, 14:57
Tag CB!
Ich will eine XML Datei gegen eine (externe, d.h. nicht in der XML-Datei verlinkte) DTD Prüfen.
das ganze findet statt in c#.net (vs05)

mit intern verlinkten dtd's klappts, nur komm ich mit den externen nicht zurecht.
Wär super wenn mir mal einer erklären könnte was "XmlParserContext" bringt ;)
XmlParserContext context = new XmlParserContext(null, null, dtdinfo[0], "", dtdinfo[1], "", dtdinfo[1], "", XmlSpace.Default);
hab ich versucht zu nutzen, bekomme aber immer eine valide xml zurück (was nicht möglich sein KANN ;) ist die xml 100% nicht valide(ggnü. dtd)! ) (was dtdinfo enthält spielt keine rolle => den das will ich erfahren, weiss nicht sicher was da hin soll ^^)
msdn war mir diesbezüglich keine grosse hilfe, genausowenig google

brauch eigentlich nur die funktion (bzw welche werte?) die es mir ermöglicht die DTD anzugeben (filename.dtd oder c:/path/filename.dtd) um dann dem validating reader den context zu übergeben.
wenn jemand weiss was ich meine und eine Lösung hat bedanke ich mich schonmal im vorraus, über andere vorschläge freue ich mich ebenso! (snippets o.ä)


scary_movie
14.04.2006, 14:31
HI also bei VS 2005 hat sich nen bissl was geändert im Gegensatz zu früher. Was du brauchst heißt XmlReaderSettings.

Bsp.:

.....
private XmlSchemaSet xss;
privateXmlReader xr;
privateXmlReaderSettings settings;
.......

xss = new XmlSchemaSet();
settings = XmlReaderSettings();

xss.Add(null, "DTD_FILE");
settings.ValidationType = ValidationType.DTD;
settings.Schemas.Add(xss);
settings.ValidationEventHandler += newValidationEventHandler(ValidationCallBack);

xr = XmlReader.Create("XmlFile.xml",xss);

.......
privatevoid ValidationCallBack(object sender, ValidationEventArgs e)
{
thrownewXmlException(String.Format("XmlValidation Error : {0}", e.Message));
}


Ich hoffe das es geht *gg*, da ich nur mit XSD arbeite.

Coreyl
15.04.2006, 18:07
das is eben das problem!
xsd soll gehen dtd aber nit?!
naja werd deinen ansatz mal ausprobieren, schaut spontan echt gut aus... danke!