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);

「予期しないファイルの終わりが発生しました。次の要素が閉じられていません: stream:stream. Line 1, position 510.」というエラーが表示されます。

4

1 に答える 1

2

エラーはすべてを示しています。読み込もうとしているxmlは無効であり、ストリーム要素は閉じられていませんあなたの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 に答える