簡體   English   中英

如何獲取XML中的內部標簽值?

[英]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").Valuehtml而不是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM