Как получить следующее значение элемента XML? - PullRequest
0 голосов
/ 03 февраля 2012
XDocument coordinates = XDocument.Load("http://feeds.feedburner.com/TechCrunch");
System.IO.StreamWriter StreamWriter1 = new System.IO.StreamWriter(DestFilePath);

foreach (var coordinate in coordinates.Descendants("guid"))
                {
                    string Links = coordinate.Value;                 
                    StreamWriter1.WriteLine(Links + Environment.NewLine );
                }

StreamWriter1.Close();

Используя этот код для вышеуказанного URL (http://feeds.feedburner.com/TechCrunch) я могу получить все ссылки, но я также хочу получить <<strong> description > и <<strong> content: закодированный > значения элементов.

Проблема в том, что я хочу получить значения <<strong> description > и т. д. вместе с их значениями guid , чтобы я мог сохранять их последовательно (в базе данных).

Должен ли я использовать LINQ что-то для этой цели? Но как, пожалуйста, скажите?

Ответы [ 4 ]

2 голосов
/ 03 февраля 2012

Вы должны перебрать каждый «элемент» и получить его свойства.Не забывайте про пространство имен «content».

  XNamespace nsContent = "http://purl.org/rss/1.0/modules/content/";
  XDocument coordinates = XDocument.Load("http://feeds.feedburner.com/TechCrunch");

  foreach (var item in coordinates.Descendants("item"))
  {
          string link = item.Element("guid").Value;
          string description = item.Element("description").Value;
          string content = item.Element(nsContent + "encoded").Value;

  }
0 голосов
/ 03 февраля 2012

Я предлагаю вам использовать XPATh для итерации каждого // содержимого / элемента, а затем получить guid, содержимое и т. Д. Этого элемента

using System;
using System.Net;
using System.Xml;

namespace TechCrunch
{
  class Program
  {
    public static void Main(string[] args)
    {
      Console.WriteLine("Hello World!");

      try
      {
        HttpWebRequest request = HttpWebRequest.CreateHttp(
          "http://feeds.feedburner.com/TechCrunch");
        WebResponse response = request.GetResponse();

        XmlDocument feedXml = new XmlDocument();
        feedXml.Load(response.GetResponseStream());

        XmlNodeList itemList = feedXml.SelectNodes("//channel/item");
        Console.WriteLine("Found " + itemList.Count + " items.");

        foreach(XmlNode item in itemList)
        {
          foreach(XmlNode child in item.ChildNodes)
          {
            Console.WriteLine("There is a child named " + child.Name);
          }
        }
      }
      catch(Exception ex)
      {
        Console.WriteLine(ex.ToString());
      }

      Console.Write("Press any key to continue . . . ");
      Console.ReadKey(true);
    }
  }
}
0 голосов
/ 03 февраля 2012

Не уверен, но попробуйте .DescendantsAndSelf ()

0 голосов
/ 03 февраля 2012

Один из способов - попытаться перечислить их по отдельности,

foreach (var coordinate in coordinates.Descendants())
    {
    foreach (var element in coordinate.Elements("description"))
    {
            string Links = element.Value;                 
            StreamWriter1.WriteLine(Links + Environment.NewLine );
    }
            foreach (var element in coordinate.Elements("guid"))
    {
            string Links = element.Value;                 
            StreamWriter1.WriteLine(Links + Environment.NewLine );
    }   
    //.................         
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...