使用公共DTD提取XML数据

本文关键字:提取 XML 数据 DTD | 更新日期: 2023-09-27 18:02:29

使用公共DTD创建XML文件。XML可以有不同的位置,因此当我要读取XML文件时,我得到一个错误,如"找不到dtd文件"。在XML中设置的DTD路径依赖于XML的位置,在XML文件所在的位置创建DTD文件是不理想的。

所以我想创建一个具有新的DTD声明的XML文件的副本,其中DTD路径设置为DTD所在的本地目录,但我不知道如何,我不确定这是否会解决我的问题。我目前正在使用XmlDocument来提取一些XMl数据。

我试着在网上搜索解决方案,但我找不到任何解决我的问题的方法。

任何帮助都将是非常感激的。

使用公共DTD提取XML数据

我认为这必须工作:

    private string msValidationError;
    public string validateXML(XmlTextReader reader, string sDTDPath)
    {
        System.Xml.XmlReaderSettings oSettings = new System.Xml.XmlReaderSettings();
        oSettings.ValidationType = ValidationType.DTD;
        oSettings.ValidationEventHandler += ValidationCallBack;
        System.IO.Directory.SetCurrentDirectory(sDTDPath); //Set dtd folder             
        System.Xml.XmlReader oReader = System.Xml.XmlReader.Create(reader, oSettings);
        try
        {
            msValidationError = "";
            while (oReader.Read())
            {
            }
            oReader.Close();
            if (!string.IsNullOrEmpty(msValidationError))
            {
                return string.Format("Invalid xml! {0}",msValidationError);
            }
        }
        catch (Exception ex)
        {
            return "Invalid xml.";
        }
        finally
        {
            try
            {
                oReader.Close();
            }
            catch (Exception exI)
            {                    
            }
        }
        return msValidationError;
    }
    private void ValidationCallBack(object sender, System.Xml.Schema.ValidationEventArgs args)
    {   
        msValidationError = msValidationError + args.Message;
    }