0

m 试图从 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。”

4

1 回答 1

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>

您的文档缺少根节点,并且“流”元素未关闭。更正 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:stream>

如果它是您的文档的根,那么您的其他元素会出现在流元素中。

当您在代码示例中将其作为字符串(在您的问题中)时,您可以像往常一样附加缺少的流,然后将其传递给 xmlreader,

(*注意:这只是基于您的示例的解决方法,但我不明白您如何从服务器获取无效 XML 作为响应。)

Xmlstring = Xmlstring + "</stream:stream>";

这使 xml 有效,您可以像往常一样将其加载到文档中。

于 2012-04-24T10:09:05.267 回答