c# - c#中的XML标签格式问题
问题描述
我正在使用以下代码从 RSS 提要 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;
}
解决方案
尽管已经接受了另一个答案,但您的代码没有任何问题,并且提供的答案实际上并没有帮助您。为了清楚起见,我并不是在批评亚历克斯,他没有机会解决这个问题,因为没有提供相关信息(但它在 OP 的下一个和后续问题中)。Preethi,您只是误解了您在下载的 RSS 文件中查看的内容。
RSS是一种基于 XML 的格式。看一下该页面上的示例,因为它使用纯文本。您正在下载的文件将采用该格式。但我猜测(基于这个问题和你接下来关于同一主题的两个问题)你指向的 RSS 文件在数据中包含 HTML 而不是纯文本。
问题是 HTML 使用<
了>
很多,所以你会注意到它对它们做了一些奇怪的事情——它把它们变成了<
and >
。它必须这样做,因为包含 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><html><td bgcolor="#f0f0f0" width=20% valign=top></html></title>
</item>
这将是您在 RSS 文件中看到的那种东西。
所以我相信您实际寻找的答案是您需要处理作为 XML 文件返回的 RSS 文件(尝试使用XmlDocument.Load(uri)或XDocument.Load(uri)与您的 RSS 提要的 URL .
一旦您将它作为 XML 文档,并查看 RSS 文件中的值,您将看到这些值已从 XML 转义中正确解码,因此 HTML 值实际上看起来像 HTML,无需任何解码任何事物。
我希望这有帮助。
推荐阅读
- python - 如何在 Visual Studio 中使用 bio python
- javascript - jquery .animate 在我的网站上不起作用
- java - 仅指定 t 的 Java 多维数组
- ruby - 是否可以在 Windows 中安装 zxing_cpp ruby gem?
- c - 混合像素(获得混合像素的新 alpha 值的正确方法)
- object-detection - Amazon Rekognition detectLabels 未检测到(足够的)汽车
- flutter - 颤动 || Firestore:如何从 Firestore 中检索数据并将其显示在 DataTable 中
- javascript - 如何为自定义 lambda 授权器模拟 jsonwebtoken + jwsks-rsa
- wso2 - WSO2,将空的 SOAP 响应转换为空的 JSON
- angular - angular 9 web worker IE