2010-04-21 41 views
0

我有處理數據的問題,這幾乎是很好的XHTML文檔,除了它在開始的時候多DTD聲明的XDocument(多DTD):加載不那麼良好的XML爲

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    ... 
    </head> 
    <body> 
    ... 
    </body> 
</html> 

我需要將這個數據加載到XDocument對象中,只使用第一個 DTD和忽略其餘的聲明。不可能完全忽略DTD處理,因爲文檔可能有不尋常的字符,如&acirc;&euro;等。

文本是從外部來源檢索的,我不知道它爲什麼會出現這種情況。

顯然,我的天真嘗試加載該文件失敗,System.Xml.XmlException : Cannot have multiple DTDs

 var xmlReaderSettings = new XmlReaderSettings 
            { 
             DtdProcessing = DtdProcessing.Parse, 
             XmlResolver = new XmlPreloadedResolver(), 
             ConformanceLevel = ConformanceLevel.Document, 
            }; 
     using (var xmlReader = XmlReader.Create(stream, xmlReaderSettings)) 
     { 
      return XDocument.Load(xmlReader); 
     } 

什麼是處理這種數據的最佳方式是什麼?

PS:我忘了提,該數據來自Stream可能會或可能不會進行字符串操作稍微複雜一點

回答

1

我不知道是否有一個XmlReader設置,將忽略此問題,但你總是可以使用標準的字符串操作去除額外的文檔類型。

相關問題