Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# StreamWrite xml节点内容忽略使用C的子节点_C#_Xml_Rss - Fatal编程技术网

C# StreamWrite xml节点内容忽略使用C的子节点

C# StreamWrite xml节点内容忽略使用C的子节点,c#,xml,rss,C#,Xml,Rss,我正在尝试编写一个程序,它读取rss新闻提要,并在txt文件中重写文章的日期、标题和正文。我两天前才学会C语言,但有其他语言的经验。 该程序在某些订阅源中运行良好,但在其他订阅源中,例如路透社,在每篇文章正文后都有一个电子邮件“this article type”链接,我在复制时似乎无法摆脱它。我为整个提要运行程序 例如,以下是一些新闻的xml代码: <item> <title>Pimco's Ivascyn sees 'significant' opportunit

我正在尝试编写一个程序,它读取rss新闻提要,并在txt文件中重写文章的日期、标题和正文。我两天前才学会C语言,但有其他语言的经验。 该程序在某些订阅源中运行良好,但在其他订阅源中,例如路透社,在每篇文章正文后都有一个电子邮件“this article type”链接,我在复制时似乎无法摆脱它。我为整个提要运行程序

例如,以下是一些新闻的xml代码:

<item>
  <title>Pimco's Ivascyn sees 'significant' opportunity in European bank assets</title>
  <link>http://feeds.reuters.com/~r/news/wealth/~3/vUJ74S5mXQg/story01.htm</link>
  <category domain="">PersonalFinance</category>
  <pubDate>Mon, 16 Jun 2014 15:37:52 GMT</pubDate>
  <guid isPermaLink="false">http://www.reuters.com/article/2014/06/16/us-investing-pimco-ivascyn-idUSKBN0ER1VV20140616?feedType=RSS&amp;feedName=PersonalFinance</guid>
  <description>NEW YORK (Reuters) - The expected unloading of roughly $1 trillion in assets by European banks represents a "significant investment opportunity" in residential and commercial real estate as well as...&lt;div class="feedflare"&gt;
  &lt;a href="http://feeds.reuters.com/~ff/news/wealth?a=vUJ74S5mXQg:y6BPXasLV5o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/news/wealth?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
  &lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/news/wealth/~4/vUJ74S5mXQg" height="1" width="1"/&gt;</description
  <feedburner:origLink>http://reuters.us.feedsportal.com/c/35217/f/654211/s/3b8e7c6b/sc/2/l/0L0Sreuters0N0Carticle0C20A140C0A60C160Cus0Einvesting0Epimco0Eivascyn0EidUSKBN0AER1VV20A140A6160DfeedType0FRSS0GfeedName0FPersonalFinance/story01.htm</feedburner:origLink>
</item>

提前感谢您的帮助或建议。

我找到了解决这个问题的方法。起初我认为这是孩子们的问题,但我意识到此链接的电子邮件是使用以下实体创建的:

&lt; 

所以我所做的就是使用子字符串,从位置0到第一个“&”字符的索引。另外,为了使代码即使在rss阅读器没有这个问题的情况下也能运行,我使用Math.Max编写了它,以避免子字符串的负大小

最终代码与正文写入文本文件的行中的一部分保持相同。此处代码替换为以下行:

sw.WriteLine(bodyNode.InnerText.Substring(0,Math.Max(bodyNode.InnerXml.IndexOf("&"),0)));

现在代码中不需要Console.WriteLine。

您的“XML代码”不是RSS源的XML结构。它是它的HTML表示形式。请提供您正在尝试处理的XML结构。很抱歉,我的错。我现在更正了它。当您有像、&;这样的角色实体时,此方法将不起作用;等。在您希望保留的文本中。您可以对描述文本进行HTML解码,然后使用正则表达式删除HTML标记。一个不太复杂但比现在稍微好一点的解决方案不是搜索“&”,而是搜索,因为这将是一个更准确的搜索HTML标记开头的方法。这是我最初尝试的方法。然而,出于某种原因,它只会正确地写出其中一篇文章的正文,而不会为其他任何一篇文章写任何东西。
&lt; 
&gt;
sw.WriteLine(bodyNode.InnerText.Substring(0,Math.Max(bodyNode.InnerXml.IndexOf("&"),0)));