65.9K
CodeProject 正在变化。 阅读更多。
Home

一个简单的 XML 验证器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.75/5 (7投票s)

2004年10月1日

2分钟阅读

viewsIcon

102406

downloadIcon

2380

一个简单的应用程序,用于在 Windows 资源管理器中验证 XML 文件。

Sample Image - xmlvalidator.png

引言

在使用 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”选项即可。

© . All rights reserved.