DTD setzten oder deaktivieren im XmlReader

15/04/2009 - 08:57 von A. Despont | Report spam
Hallo NG

Ich habe ein XML bei dem ein DTD definiert ist oder auch nicht.

Ich möchte gerne dieses Xml via DTD prüfen. Wobei das DTD an einem
bestimmten Ort ist welcher sich àndert, also dynamisch ist. Das einlesen
funktioniert soweit, doch habe ich das Problem den Pfad des DTDs zu setzen.
Wenn ich die SystemID sezte bekomme ich einen Fehler "kein DTD gefunden"
resp. wenn
bereits ein Doctype definiert ist, "es können nit zwei DTD definiert
werden".

Wie kann ich also ein bestehende DTD definition umdefinieren und/oder wenn
kein DTD im XML
definiert ist, diese auf einen Lokales Verzeichnis setzten.

Ich kann jedoch kein XmlDocument verwenden noch die DTD an den Ort wo sich
XML befindet kopieren und auch den standard Path kurzfristig auf den Pfad
des DTD legen.

Kann mir jemand helfen?
Gibt es irgendwo so ein beispiel?


























































































































// Create Resolver
XmlResolver Xresolver = null;
Xresolver = new XmlUrlResolver();
Xresolver.Credentials = System.Net.CredentialCache.DefaultCredentials;

// Create Settings
XmlReaderSettings Xsettings = new XmlReaderSettings();
Xsettings.IgnoreComments = true;
Xsettings.IgnoreWhitespace = true;
Xsettings.IgnoreProcessingInstructions = true;
Xsettings.ValidationType = ValidationType.None;
Xsettings.CheckCharacters = true;
Xsettings.ConformanceLevel = ConformanceLevel.Auto;
Xsettings.ProhibitDtd = true;
Xsettings.ValidationType = ValidationType.None;
Xsettings.XmlResolver = Xresolver;
Xsettings.ValidationEventHandler += new
ValidationEventHandler(zValidationCallBack);

//Create Context
NameTable nt = new NameTable(); // Create the NameTable.
XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt); // Create the
XmlNamespaceManager.
XmlParserContext Xcontext = new XmlParserContext(null, nsmgr, null,
XmlSpace.None);

// Check if DTD needed
if (mCfgImp.strDtdFile != "" && mCfgImp.strXsdFile == "")
{
Xsettings.ProhibitDtd = false;
Xsettings.ValidationType = ValidationType.DTD;
Xsettings.ValidationFlags =
XmlSchemaValidationFlags.ReportValidationWarnings;
Xcontext.DocTypeName = "root";
//Xcontext.PublicId = "-//W3C//DTD XML 1.0 Strict//EN";
//Xcontext.SystemId = mCfgImp.strDtdFile;
Xcontext.SystemId = Xresolver.ResolveUri(null,
mCfgImp.strDtdFile).ToString();
}

// Create new XML reader
mXrd = XmlReader.Create(strTempXml, Xsettings, Xcontext);


<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<


Gruss
Andy
 

Lesen sie die antworten

#1 Thorsten Doerfler
15/04/2009 - 17:52 | Warnen spam
A. Despont schrieb:
Ich habe ein XML bei dem ein DTD definiert ist oder auch nicht.



Nur zur Info für den Rest: Andy hat es vorgezogen diese Diskussion doch
in der zumindest sprachlich besser getroffenen Gruppe zu führen:

http://groups.google.de/group/micro...f760f23f0#

Thorsten Dörfler
Microsoft MVP Visual Basic

vb-hellfire visual basic faq | vb-hellfire - einfach anders
http://vb-faq.de/ | http://www.vb-hellfire.de/

Ähnliche fragen