从XML字符串中检索challenge元素

时间:2012-04-24 10:01:31

标签: xml c#-3.0

尝试从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位。”

1 个答案:

答案 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有效,您可以像往常一样将其加载到文档中。