C#中的XML标签格式问题

时间:2018-07-03 10:38:16

标签: c# xml rss

Am使用以下代码从RSS feed 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;
}

2 个答案:

答案 0 :(得分:2)

尽管已经接受了另一个答案,但是您的代码没有任何问题,并且提供的答案实际上并没有帮助您。只是要清楚一点,我并不是在批评Alex,因为没有提供相关信息,Alex没有机会解决这个问题(但这是OP的nextsubsequent问题) 。 Preethi,您只是误解了所下载的RSS文件中的内容。

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

问题是HTML大量使用了<>,因此您会注意到它对它们做了一些奇怪的事情-将它们变成了&lt;和{{1 }}。之所以必须这样做,是因为包含HTML的值在RSS文件的XML定义内。

让我使用一个类比...这与您要创建包含双引号的字符串时遇到的问题非常相似。字符串使用双引号作为终止符,因此您不能这样做:

&gt;

因为C#看到开头的双引号,然后去寻找结尾的双引号,并且在单词string hello="hello"world"; 之后找到一个。因此,您必须转义该字符,以便它意识到这不是字符串的结尾。您必须这样做:

hello

同样的事情也适用于XML。 XML格式完全取决于string hello="hello\"world"; <字符(除其他外)。因此,如果我有一些XML话:

>

那很好;但是如果我只是用一段HTML代替了“示例条目”的纯文本,则为

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

这将是一个问题,因为<item> <title><html><td bgcolor="#f0f0f0" width=20% valign=top></html></title> </item> 标记内的值将引起问题。一个问题是它不是格式正确的 XML(例如,因为没有结束title标记,并且不必引用属性;因为HTML 不是 XML)。另一个问题是,这样做会破坏RSS格式的定义,因为“ title”标签应包含一个值,而不是其他标签。因此,我们需要在标题标签中转义,如下所示:

td

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

因此,我认为您真正要寻找的答案是您需要将返回的RSS文件作为XML文件进行处理(尝试将XmlDocument.Load(uri)XDocument.Load(uri)与RSS的URL一起使用提要。

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

我希望这会有所帮助。

答案 1 :(得分:0)

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

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