XDocument coordinates = XDocument.Load("http://feeds.feedburner.com/TechCrunch");
System.IO.StreamWriter StreamWriter1 = new System.IO.StreamWriter(DestFile);
XNamespace nsContent = "http://purl.org/rss/1.0/modules/content/";
string pchild = null;
foreach (var item in coordinates.Descendants("item"))
{
string link = item.Element("guid").Value;
//string content = item.Element(nsContent + "encoded").Value;
foreach (var child in item.Descendants(nsContent + "encoded"))
{
pchild = pchild + child.Element("p").Value;
}
StreamWriter1.WriteLine(link + Environment.NewLine + Environment.NewLine + pchild + Environment.NewLine);
}
StreamWriter1.Close();
如果我使用注释行代码(string content = item.Element(nsContent + "encoded").Value;
)而不是内部for loop
,那么它将获取<conten:encoded>
元素的值,但它包含所有链接,图像等等。我只想要文字。
为此,我尝试使用此过滤器(内部循环),但显示错误:
对象引用未设置为对象的实例。
请为我建议代码,以便我只能存储文字并删除所有其他链接,<img>
标记等。
答案 0 :(得分:1)
item.Element(nsContent + "encoded").Value
的内容是 html 而非 xml 。您应该相应地解析它,例如使用Html Agility Pack
参见下面的示例
string content = item.Element(nsContent + "encoded").Value;
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.Load(new StringReader(content));
var text = String.Join(Environment.NewLine + Environment.NewLine,
doc.DocumentNode
.Descendants("p")
.Select(n => "\t" + System.Web.HttpUtility.HtmlDecode(n.InnerText))
);
答案 1 :(得分:0)
首先,我将首先使用StringBuilder:
StringBuilder sb = new StringBuilder();
然后,我怀疑有时候,“孩子”没有“p”元素,所以你可以在使用它之前检查:
foreach (var child in item.Descendants(nsContent + "encoded"))
{
if (child.Element("p") != null)
{
sb.Append(child.Element("p").Value);
}
}
StreamWriter1.WriteLine(link + Environment.NewLine + Environment.NewLine + sb.ToString() + Environment.NewLine);
这对你有用吗?