首页 > 解决方案 > c#中的XML标签格式问题

问题描述

我正在使用以下代码从 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;
}

标签: c#xmlrss

解决方案


尽管已经接受了另一个答案,但您的代码没有任何问题,并且提供的答案实际上并没有帮助您。为了清楚起见,我并不是在批评亚历克斯,他没有机会解决这个问题,因为没有提供相关信息(但它在 OP 的下一个后续问题中)。Preethi,您只是误解了您在下载的 RSS 文件中查看的内容。

RSS是一种基于 XML 的格式。看一下该页面上的示例,因为它使用纯文本。您正在下载的文件将采用该格式。但我猜测(基于这个问题和你接下来关于同一主题的两个问题)你指向的 RSS 文件在数据中包含 HTML 而不是纯文本。

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

让我打个比方……这与您要创建包含双引号的字符串时遇到的问题非常相似。字符串使用双引号作为终止符,所以你不能这样做:

string hello="hello"world";

因为 C# 看到开始的双引号,然后去寻找结束的双引号,它找到了 word 之后的那个hello。因此,您必须转义该字符,以便它意识到这不是字符串的结尾。你所要做的:

string hello="hello\"world";

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

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

那很好;但如果我只是用一段 HTML 替换“示例条目”的纯文本:

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

那么这将是一个问题,因为title标签内的值会导致问题。一个问题是它不是格式良好的XML(例如,因为没有结束td标记并且属性不必被引用;因为 HTML不是XML)。另一个问题是这样做会破坏 RSS 格式的定义,因为“title”标签应该包含一个值,而不是其他标签。所以我们需要对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)XDocument.Load(uri)与您的 RSS 提要的 URL .

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

我希望这有帮助。


推荐阅读