.NET:如何验证XML文件,DTD没有DOCTYPE声明 [英] .NET : How to validate XML file with DTD without DOCTYPE declaration

查看:168
本文介绍了.NET:如何验证XML文件,DTD没有DOCTYPE声明的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有没有DOCTYPE声明,我想在阅读与外部DTD来验证XML文件。

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)

你如何设置外部DTD的路径?你怎么验证?

How do you set the path for that external DTD? How do you validate?

推荐答案

我用下面的函数成功之前,它应该很容易适应。如何过这依赖于创建的XmlDocument为大官提及。这可以通过以下方式实现:

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;
}

这篇关于.NET:如何验证XML文件,DTD没有DOCTYPE声明的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆