2010-04-21 4 views
0

Я получил обработку данных проблемы, которая почти хорошо сформированную XHTML документа кроме этого есть несколько объявлений DTD в начале:загрузки не так хорошо сформированный XML в XDocument (множественный DTD)

<!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, который будет игнорировать это проблема, но вы всегда можете использовать стандартные манипуляции строк для удаления дополнительных доктринов.

Смежные вопросы