Am使用以下代码从RSS feed URL生成XML文件,但是数据未以XML文件中的标签格式显示。
在XML文件中,<
符号显示为<
和>
符号显示类似>
请帮助我。这是我的代码。
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;
}
答案 0 :(得分:2)
尽管已经接受了另一个答案,但是您的代码没有任何问题,并且提供的答案实际上并没有帮助您。只是要清楚一点,我并不是在批评Alex,因为没有提供相关信息,Alex没有机会解决这个问题(但这是OP的next和subsequent问题) 。 Preethi,您只是误解了所下载的RSS文件中的内容。
RSS是基于XML的格式。请看一下该页面上的example,因为它使用的是纯文本。您要下载的文件将采用这种格式。但是我猜测(基于这个问题和您在同一主题上的下两个问题),您指向的RSS文件在数据中包含HTML,而不是纯文本。
问题是HTML大量使用了<
和>
,因此您会注意到它对它们做了一些奇怪的事情-将它们变成了<
和{{1 }}。之所以必须这样做,是因为包含HTML的值在RSS文件的XML定义内。
让我使用一个类比...这与您要创建包含双引号的字符串时遇到的问题非常相似。字符串使用双引号作为终止符,因此您不能这样做:
>
因为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);