XML c# 中的标记格式问题

XML tag format issue in c#

我正在使用以下代码从 RSS 提要 URL 生成 XML 文件,但数据未以标记格式显示在 XML 文件中。

在 XML 文件中 < 符号显示为 &lt;> 符号显示为 &gt;

请帮我解决这个问题。这是我的代码。

public bool DownloadFeed(){

    string user = "xxx";
    string password = "pwd";

    WebClient web = new WebClient();
    System.Net.WebClient wc = new System.Net.WebClient();
    wc.Credentials = new System.Net.NetworkCredential(user, password);
    System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3 | 
                                                        SecurityProtocolType.Tls | 
                                                        SecurityProtocolType.Tls11 | 
                                                        SecurityProtocolType.Tls12;
    wc.DownloadFile(@"https://Entered RSS Feed URL here", @"H:\import\Test.xml");
    return true;
}

文件中的字符串已清理。您可以将其作为字符串下载,解码然后保存到文件中:

var xmlString = HttpUtility.HtmlDecode(wc.DownloadString(@"https://Entered RSS Feed URL here"));
File.WriteAllText(@"H:\import\Test.xml", xmlString);

虽然另一个答案已经被接受,但您的代码没有任何问题,提供的答案实际上并没有帮助您。需要明确的是,我并不是在批评亚历克斯,他没有机会解决这个问题,因为没有提供相关信息(但它在 OP 的 next and subsequent 问题中)。 Preethi,你只是误解了你在下载的 RSS 文件中看到的内容。

RSS is an XML-based format. Take a look at the example 在那个页面上,因为它使用纯文本。您正在下载的文件将采用该格式。但我猜测(基于这个问题和你接下来关于同一主题的两个问题)你指向的 RSS 文件在数据中包含 HTML 而不是纯文本。

问题是 HTML 经常使用 <>,所以你会注意到它对它们做了一些奇怪的事情 - 它把它们变成了 &lt;&gt;。它必须这样做,因为包含 HTML 的值在 RSS 文件的 XML 定义中。

让我打个比方...这与您在创建包含 double-quote 的字符串时遇到的问题非常相似。字符串使用 double-quotes 作为终止符,所以你不能做:

string hello="hello"world";

因为 C# 看到开头 double-quote,然后去寻找结尾 double-quote,它找到了单词 hello 之后的那个。所以你必须转义那个字符,这样它才能意识到这不是字符串的结尾。你必须做:

string hello="hello\"world";

同样的事情也适用于 XML。 XMLs 格式完全取决于 <> 字符(除其他外)。所以如果我有一些 XML 说:

<item>
  <title>Example entry</title>
</item>

这样就好了;但是如果我简单地用一段 HTML:

替换 "Example entry" 的纯文本
<item>
  <title><html><td bgcolor="#f0f0f0" width=20% valign=top></html></title>
</item>

那就出问题了,因为title标签里面的值会出问题。一个问题是它不是 well-formed XML(例如,因为没有结束 td 标记并且属性不必被引用;因为 HTML 是 而不是 XML)。另一个问题是这样做会破坏 RSS 格式的定义,因为 "title" 标签应该包含一个值,而不是其他标签。所以我们需要转义标题标签中的值,如下所示:

<item>
  <title>&lt;html&gt;&lt;td bgcolor="#f0f0f0" width=20% valign=top&gt;&lt;/html&gt;</title>
</item>

这就是您在 RSS 文件中看到的那种东西。

所以我相信您实际上正在寻找的答案是您需要处理作为 XML 文件返回的 RSS 文件(尝试将 XmlDocument.Load(uri) or XDocument.Load(uri) 与 URL 的 RSS 提要。

一旦您将其作为 XML 文档,并且查看 RSS 文件中的值,您将看到这些值已从 XML 转义中正确解码,因此HTML 值实际上看起来像 HTML,不需要解码任何东西。

希望对您有所帮助。