我正在分析XMPP XML流。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);