Search code examples
c#xmlget

I need to get some values from XML


For example, I need to get: News Name, and News Date from:

<info>
<news>
<news name="Test 1" date="08.13.2013"/>
<news name="Test 2" date="08.09.2013"/>
</news>
</info>

using C#, to show this in Console..

I've tried several codes, which I found on the internet. But none served me!

EDIT¹: I've tried the following codes:

XmlDocument Doc = new XmlDocument();
Doc.Load(Server.MapPath("Content/Doc.xml"));
XmlNodeList itemList = Doc.DocumentElement.SelectNodes("news");
foreach (XmlNode currNode in itemList)
{
  string name = string.Empty;  <!-- here I make a new string and call it "date"-->
  XmlNode item = currNode.SelectSingleNode("news");
  name = item.Attributes["name"].Value.ToString();
  Console.WriteLine("Test Name: "+name+"");
}

and:

XmlDocument xml = new XmlDocument();
xml.LoadXml(myXmlString);

XmlNodeList xnList = xml.SelectNodes("/news/news");
foreach (XmlNode xn in xnList)
{
  string name = xn["name"].InnerText;
  string date = xn["date"].InnerText;
  Console.WriteLine("Test: {0} {1}", name, date);
}

But it did not work, and nothing appears. or the program closes automatically.

SOLVED! Thanks, for all!

I use this code:

static void Main(string[] args)
        {
            XElement rootElement = XElement.Load(@"http://mywebsite.com/test.xml");

            Program test = new Program();
            Console.WriteLine(test.GetOutline(0, rootElement));  
        }

        private string GetOutline(int indentLevel, XElement element)
        {
            StringBuilder result = new StringBuilder();

            if (element.Attribute("name") != null)
            {
                result = result.AppendLine(new string(' ', indentLevel * 2) + element.Attribute("name").Value);
            }

            foreach (XElement childElement in element.Elements())
            {
                result.Append(GetOutline(indentLevel + 1, childElement));
            }

            return result.ToString();
        }

Result: Test 1 Test 2


Solution

  • Linq to Xml may be a better option as feching data is a lot simpler and direct,

    For example one way to get your data based on the xml sample you provided could be something like this:

    XElement data = XElement.Load(@"C:\Test.xml");
    
    var newsResults = data.Element("news")
                   .Descendants("news")
                   .Select(x => new
                   {
                       Name = (string)x.Attribute("name"),
                       Date = (DateTime)x.Attribute("date")
                   });
    
    foreach (var news in newsResults)
    {
        Console.WriteLine("News: {0}, Date: {1}", news.Name, news.Date);
    }