Stellt sich heraus, das ist einfach Option in dem XmlTextReader (und XmlValidatingReader) Klasse - "EntityHandling".
So eine einfache Demo des Problems:
System.Xml.XmlTextReader textReader = new System.Xml.XmlTextReader("testin.xml");
textReader.EntityHandling = System.Xml.EntityHandling.ExpandEntities;
System.Xml.XmlDocument outputDoc = new System.Xml.XmlDocument();
outputDoc.Load(textReader);
System.Xml.XmlDocumentType docTypeIfPresent = outputDoc.DocumentType;
if (docTypeIfPresent != null)
outputDoc.RemoveChild(docTypeIfPresent);
outputDoc.Save("testout.html");
textReader.Close();
Und wenn Sie nicht lieber das Dokument in den Speicher haben, zu laden, ein Streaming-Äquivalent:
System.Xml.XmlTextReader textReader = new System.Xml.XmlTextReader("testin.xml");
textReader.EntityHandling = System.Xml.EntityHandling.ExpandEntities;
System.Xml.XmlTextWriter textWriter = new System.Xml.XmlTextWriter("testout.html", System.Text.Encoding.UTF8);
while (textReader.Read())
{
if (textReader.NodeType != System.Xml.XmlNodeType.DocumentType)
textWriter.WriteNode(textReader, false);
else
textReader.Skip();
}
textWriter.Close();
MSIE kann nicht mit dem vollkommen legalen XHTML umgehen, das Sie zeigen? Dieser Mist ist wirklich kaputt. – bortzmeyer