我正在尝试解析XMPP XML流。XML流的棘手之处在于开始标记直到会话结束才关闭,即永远不会接收到完整的DOM。
我需要从流中读取XML元素,而不用担心根元素未关闭的问题。
理想情况下,这应该可以实现,但事实并非如此,我认为这是因为阅读器正在等待根元素被关闭。
下面的代码(我从Jacob Reimers那里借来的)可以工作,但我希望有一种更有效率的方式,不需要创建新的XmlReader并进行字符串解析。
<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);
IDisposable
。stanzaReader
是另一个不同的对象。 - Marc Gravell