0

次のコードがあり、やりたいことを実行します。Web 呼び出しから XML データを取得し、オブジェクトに配置します。

string url = ConfigurationManager.AppSettings[CONFIGURATION_KEY_XE_COM_URL];

        var serialiser = new XmlSerializer(typeof(xedatafeed));

        var settings = new XmlReaderSettings {XmlResolver = null, DtdProcessing = DtdProcessing.Parse};

        var reader = XmlReader.Create(url, settings);

        var feed = (xedatafeed) serialiser.Deserialize(reader);

        return feed;

問題は、このデータの文字列表現も取得したいということです。これを行うと、feed.ToString()ほとんどすべてのデータが得られますが、すべてではありません。欠けているものは2つ

  1. <?xml version="1.0" encoding="ISO-8859-1"?>宣言_
  2. レスポンスに付随する DTD 宣言。

この2点もお願いします。オブジェクトへの逆シリアル化には必要ないため、DTD 宣言を除外する必要があり、除外しないとエラーが発生しました。上記のコードで完全な応答を取得する最もクリーンな方法は何ですか?

4

1 に答える 1

1

私の経験では、Web サービスからの結果を取得した後に宣言を文字列に追加するか、プログラムで宣言する方が簡単です。

方法 1 - データの受信後に XML 宣言を追加する

string xmlStr = string.format(@" &lt; ?xml version=\"1.0\" encoding=\"ISO-8859-1\"? &gt; {0}", WebServiceStringResult)

次に、次のように連結された文字列から新しい XML ドキュメント オブジェクトを作成できます。

YourXmlDocumentObject.ReadXML(xmlStr) 
  1. そして、目的の値をループまたは xpath アウトします。また
  2. 必要に応じて、YourXmlDocumentObject をキャスト/操作します。

方法 2 - データの受信後に XML/DTD 宣言をプログラムで追加する

新しい XmlDocument オブジェクトで、XML バージョンと DTD 情報に一致するようにプロパティを設定します。

最後に、Web サービスの結果文字列を次のように追加します。

YourXmlDocumentObject.ReadXML(WebServiceStringResult);

注: Soap 1.1 および 1.2 は、埋め込み要求の一部としての宣言で失敗します。つまり、宣言は Web メソッドの 1 つの中にあります。

~ ^私はまだこのpoxyエディターの使い方を学んでいます。ごめんなさい ~

于 2013-09-13T10:25:08.170 に答える