尝试从Xml下面检索挑战元素,
我,使用下面的代码
string Xmlstring = "<?xml version=\"1.0\"?><stream:stream id=\"3DAC47EA\" from=\"chat.facebook.com\" xmlns=\"jabber:client\" xmlns:stream=\"http://etherx.jabber.org/streams\" version=\"1.0\" xml:lang=\"en\"><stream:features><mechanisms xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\"><mechanism>X-FACEBOOK-PLATFORM</mechanism><mechanism>DIGEST-MD5</mechanism></mechanisms></stream:features><challenge xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\">dmVyc2lvbj0xJm1ldGhvZD1hdXRoLnhtcHBfbG9naW4mbm9uY2U9QjNBOUU4NzJFQUJGNkQ5RDM0RTZDNjgzMjkyMTBGOEQ=</challenge>";
XmlDocument Doc = new XmlDocument();
Doc.LoadXml(Xmlstring);
我收到错误说“文件已发生意外结束。以下元素未关闭:流:流。第1行,第510位。”
答案 0 :(得分:2)
错误告诉所有内容,您尝试加载的xml无效且Stream元素未关闭 你的xml
<stream:stream id=\"3DAC47EA\" from=\"chat.facebook.com\" xmlns=\"jabber:client\" xmlns:stream=\"http://etherx.jabber.org/streams\" version=\"1.0\" xml:lang=\"en\">
<stream:features>
<mechanisms xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\">
<mechanism>
X-FACEBOOK-PLATFORM
</mechanism>
<mechanism>
DIGEST-MD5
</mechanism>
</mechanisms>
</stream:features>
<challenge xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\">
dmVyc2lvbj0xJm1ldGhvZD1hdXRoLnhtcHBfbG9naW4mbm9uY2U9QjNBOUU4NzJFQUJGNkQ5RDM0RTZDNjgzMjkyMTBGOEQ=
</challenge>
您的文档缺少根节点,并且“stream”元素未关闭。更正xml文档将修复错误。
必须将stream元素固定为
<stream:stream id=\"3DAC47EA\" from=\"chat.facebook.com\" xmlns=\"jabber:client\" xmlns:stream=\"http://etherx.jabber.org/streams\" version=\"1.0\" xml:lang=\"en\">
...
</stream:stream>
你的其他元素都在流元素中,如果它是你文档的根目录。
正如您在代码示例中将其作为字符串一样(在您的问题中) 您可以像下面一样追加丢失的流,并像往常一样将其传递给xmlreader,
(*注意:这只是基于您的示例的解决方法,但我不了解您如何从服务器获取无效的XML。)
Xmlstring = Xmlstring + "</stream:stream>";
这使得xml有效,您可以像往常一样将其加载到文档中。