2010-04-21 49 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设置,将忽略此问题,但你总是可以使用标准的字符串操作去除额外的文档类型。

相关问题