【问题标题】:C# Stream Reader adding \n to XMLC# Stream Reader 将 \n 添加到 XML
【发布时间】:2023-03-20 05:52:01
【问题描述】:

我使用 StreamReader 类从 Google 获取用于我的 GeoCoding 过程的 XML。

StreamReader srGeoCode = new StreamReader(WebRequest.Create(Url).GetResponse().GetResponseStream());
String GeoCodeXml = srGeoCode.ReadToEnd();
XmlDocument XmlDoc = new XmlDocument();
GeoCode oGeoCode = new GeoCode();
XmlDoc.Load(GeoCodeXml);

我得到了 XML,但它在 XML 中添加了 \n 和其他额外内容

<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<kml xmlns=\"http://earth.google.com/kml/2.0\"><Response>\n  <name>

我在 VB 中有相同的代码,但它没有这样做。我可以使用这个控制台应用程序的 VB 版本成功地对我的信息进行地理编码。

C# 版本是否有理由将此额外数据添加到我检索回来的 XML 中?我正在尽力将所有内容都转换为 C#。我喜欢通过 VB 编写代码。

这是 VB 代码:

    Dim wreqGeoCode As WebRequest = WebRequest.Create(strURL)
    Dim wresGeoCode As WebResponse = wreqGeoCode.GetResponse
    Dim srGeoCode As New StreamReader(wresGeoCode.GetResponseStream())
    Dim strXML As String = srGeoCode.ReadToEnd()
    Dim xmlDoc As New XmlDocument
    xmlDoc.LoadXml(strXML)

【问题讨论】:

  • 能把VB代码也发一下吗?
  • Dim wreqGeoCode As WebRequest = WebRequest.Create(strURL) Dim wresGeoCode As WebResponse = wreqGeoCode.GetResponse Dim srGeoCode As New StreamReader(wresGeoCode.GetResponseStream()) Dim strXML As String = srGeoCode.ReadToEnd() Dim xmlDoc As New XmlDocument xmlDoc.LoadXml(strXML) 这是在我意识到我可以结合 WebRequest 调用之前。我也尝试了 C# 方式,没有结合 WebRequest。

标签: c# xml streamreader geocode


【解决方案1】:

如果要加载字符串,则需要 XmlDoc.LoadXml。从文件加载负载。


顺便说一句,替代方案也更有效。您可以直接从流中加载文档:

WebRequest webRequest = WebRequest.Create(Url);
using (WebResponse webResponse = webRequest.GetResponse())
{
    using (Stream responseStream = webResponse.GetResponseStream())
    {
        XmlDocument XmlDoc = new XmlDocument();
        GeoCode oGeoCode = new GeoCode();
        XmlDoc.Load(responseStream);
    }
}

using 语句确保 WebResponseStream 得到清理,即使抛出异常也是如此。

【讨论】:

  • +1,是的,绝对是这个,他的 VB 版本使用 LoadXml 并且可以正常工作。他的 C# 使用 Load 而不是。
  • 谢谢。我以为我是从 VB 复制过来的,但看起来我没有。有第二双眼睛看你的代码总是很高兴。
  • 谢谢!我将考虑更改代码以提高效率。顺便说一句,我们有相同的姓氏 - 哈哈
【解决方案2】:

你不只是做

   GeoCodeXml=GeoCodeXml.Replace("\n","");

如果它真的返回这里提到的 \n。

【讨论】:

  • 我可能会这样做,只是想看看它为什么会这样做。
猜你喜欢
  • 2013-11-25
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 2015-11-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
相关资源
最近更新 更多