2016-08-15 10 views
0

XML文件是使用公共DTD创建的。 XML可能具有不同的位置,因此当我要读取XML文件时,出现“找不到dtd文件”之类的错误。 XML中设置的DTD路径依赖于XML位置,并且在XML文件所在的w/c中创建DTD文件并不理想。C#使用公共DTD提取XML数据

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

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

任何帮助将不胜感激。

在此先感谢。

回答

0

我认为这必须工作:

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