Я играю с синтаксическим анализом XML-потока XMPP. Сложность XML-потока заключается в том, что начальный тег не закрывается до конца сеанса, т.е. полная DOM никогда не получается.
<stream:stream>
<features>
<starttls />
</features>
....
network session persists for arbitrary time
....
</stream:stream>
Мне нужно читать элементы XML из потока, не беспокоясь о том, что корневой элемент не был закрыт.
В идеале это сработает, но это не так, и я предполагаю, что это потому, что читатель ожидает закрытия корневого элемента.
XElement someElement = XNode.ReadFrom(xmlReader) as XElement;
Код ниже (который я позаимствовал из Jacob Reimers) действительно работает, но я надеюсь, что есть более эффективный способ, который не требует создания нового XmlReader и выполнения синтаксического анализа строк.
XmlReader stanzaReader = xmlReader.ReadSubtree();
stanzaReader.MoveToContent();
string outerStanza = stanzaReader.ReadOuterXml();
stanzaReader.Close();
XElement someElement = XElement.Parse(outerStanza);