[英]How to obtain inner tags value in XML?
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>
標簽等。
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))
);
首先,我將從使用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);
那對你有用嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.