I have an XML file with no DOCTYPE declaration that I would like to validate with an external DTD upon reading.
Dim x_set As Xml.XmlReaderSettings = New Xml.XmlReaderSettings()
x_set.XmlResolver = Nothing
x_set.CheckCharacters = False
x_set.ProhibitDtd = False
x = XmlTextReader.Create(sChemin, x_set)
How do you set the path for that external DTD? How do you validate?
From stackoverflow
-
Could you create an Xml.XmlDocument with the DTD you want, then append the XML file data to the in-memory Xml.XmlDocument, then validate that?
-
I have used the following function successfully before, which should be easy to adapt. How ever this relies on creating a XmlDocument as magnifico mentioned. This can be achieved by:
XmlDocument doc = new XmlDocument(); doc.Load( filename ); doc.InsertBefore( doc.CreateDocumentType( "doc_type_name", null, DtdFilePath, null ), doc.DocumentElement ); /// <summary> /// Class to test a document against DTD /// </summary> /// <param name="doc">XML The document to validate</param> private static bool ValidateDoc( XmlDocument doc ) { bool isXmlValid = true; StringBuilder xmlValMsg = new StringBuilder(); StringWriter sw = new StringWriter(); doc.Save( sw ); doc.Save( TestFilename ); XmlReaderSettings settings = new XmlReaderSettings(); settings.ProhibitDtd = false; settings.ValidationType = ValidationType.DTD; settings.ValidationFlags = XmlSchemaValidationFlags.ReportValidationWarnings; settings.ValidationEventHandler += new ValidationEventHandler( delegate( object sender, ValidationEventArgs args ) { isXmlValid = false; xmlValMsg.AppendLine( args.Message ); } ); XmlReader validator = XmlReader.Create( new StringReader( sw.ToString() ), settings ); while( validator.Read() ) { } validator.Close(); string message = xmlValMsg.ToString(); return isXmlValid; }
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.