の周りにラッパーを記述できますXmlReader
。これにより、後続の xml 処理命令と doctype が除外されます。
public class XmlFilteringReader : XmlReader
{
private readonly XmlReader _source;
private bool _gotXmlDeclaration = false;
private bool _gotDoctype = false;
public XmlFilteringReader(XmlReader source)
{
_source = source;
}
public override bool Read()
{
var ok = _source.Read();
if (ok && _source.NodeType == XmlNodeType.ProcessingInstruction
&& _source.LocalName == "xml")
{
if (_gotXmlDeclaration) return Read(); // Recursive
_gotXmlDeclaration = true;
}
else if (ok && _source.NodeType == XmlNodeType.DocumentType)
{
if (_gotDoctype) return Read(); // Recursive
_gotDoctype = true;
}
return ok;
}
// Implementation of other methods and properties
// by calling the same method or property on _source
}
var serializer = new XmlSerializer(response.GetType());
var reader = new XmlFilteringReader(new XmlTextReader(stream) {XmlResolver = null});
var result = (IResponse) serializer.Deserialize(reader);
実装は、 Mvp.XmlライブラリXmlWrappingReader
から使用することで簡素化できます。これに関するブログ投稿もあります。