一个简单的 XML 验证器






4.75/5 (7投票s)
2004年10月1日
2分钟阅读

102406

2380
一个简单的应用程序,用于在 Windows 资源管理器中验证 XML 文件。
引言
在使用 XML 时,能够验证 XML 非常有用。通常,将 XML 加载到 XML 编辑包并使用其内置工具进行验证会很繁琐。本文描述了一个简单的轻量级工具,用于通过在资源管理器中右键单击 XML 文件来验证 XML 文件。
集成到资源管理器
编写此应用程序的主要目标之一是让我能够轻松检查 XML 文件的语法是否有效。有什么比在 Windows 资源管理器中右键单击它们来做到这一点更好的方法呢?
为了集成到资源管理器,我使用了 Nish 的博客 中详细介绍的代码。
当执行该应用程序时,它会检查传递给它的命令行参数。如果找到参数 /install
,则该应用程序会在注册表中针对 XML 文件注册自身。
if ((args.Length == 1) && (args[0] == "/install"))
{
ContextMenu cm = new ContextMenu();
bool ok = cm.AddContextMenuItem(".xml", "Validate",
"Validate XML", "\""+Application.ExecutablePath + "\" %1");
if ( ok == true )
MessageBox.Show("The application has been installed.");
else
MessageBox.Show("The application could not be installed.");
}
XML 验证
一旦该应用程序集成到 Windows 资源管理器,它将接收一个命令行参数,即要验证的 XML 文件的名称。该文件使用如下代码所示的 XMLValidatingReader
进行验证。
public class XMLValidator
{
private String fileName;
static private ArrayList errors = new ArrayList();
static private bool bValid;
public XMLValidator(String fileName)
{
this.fileName = fileName;
bValid = true;
}
public ArrayList GetErrors()
{
return errors;
}
public bool Validate()
{
XmlValidatingReader reader=null;
try
{
errors.Clear();
bValid = true;
XmlTextReader txtreader = new XmlTextReader (fileName);
reader = new XmlValidatingReader (txtreader);
// Set the validation event handler
reader.ValidationEventHandler +=
new ValidationEventHandler (ValidationCallBack);
// Read XML data
while (reader.Read()){}
}
catch (Exception e)
{
bValid = false;
errors.Add(e.Message);
}
finally
{
//Close the reader.
reader.Close();
}
return bValid;
}
private void ValidationCallBack (object sender, ValidationEventArgs args)
{
bValid = false;
errors.Add(args.Message);
}
}
此类的主要工作在 Validate()
方法中完成。可以看到,它实例化了一个 XmlValidatingReader
对象。此类可以针对 DTD、XDR 和 XSD 模式进行验证。实例化 XmlValidatingReader
后,代码指定一个 ValidationEventHandler
。当在 XML 中找到错误时,将调用此事件处理程序。因此,此处理程序所做的一切就是将任何错误记录到列表中,以便可以显示它们。最后,该类使用 read()
方法读取指定 XML 文件中的所有行。
运行应用程序
运行该应用程序非常容易。首先,您需要通过使用 /install
开关运行该应用程序来在注册表中创建链接。然后只需在资源管理器中右键单击任何 XML 文件,然后选择“验证 XML”选项即可。