2016-08-15 51 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; 
    }