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()几乎给了我所有的数据,但不是所有的数据。缺少两件事

  1. <?xml version="1.0" encoding="ISO-8859-1"?>宣言_
  2. 伴随响应而来的 DTD 声明。

我也想要这两样东西。我不得不排除 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 Document 对象:

YourXmlDocumentObject.ReadXML(xmlStr) 
  1. 然后循环或 xpath 出所需的值。或者
  2. 根据需要投射/操作 YourXmlDocumentObject。

方法 2 - 收到数据后以编程方式添加 XML/DTD 声明

在您的新 XmlDocument 对象中,设置属性以匹配您的 XML 版本和 DTD 信息。

最后,只需添加您的网络服务结果字符串:

YourXmlDocumentObject.ReadXML(WebServiceStringResult);

注意:Soap 1.1 和 1.2 将作为嵌入式请求的一部分声明。即声明在您的一种网络方法中。

~ ^我还在学习使用这个poxy编辑器,对不起~

于 2013-09-13T10:25:08.170 回答