tags:

views:

65

answers:

2

I am new to xml and unable to find a way to get content in between tags. My XML file is

<?xml version="1.0" encoding="utf-8"?>
<block1>
  <file name="c:\w0.xml">
    <word>Text</word>
    <number>67</number>
   </file>
  <file name="c:\w1.xml">
    <word>Text</word>
    <number>67</number>
  </file>
  <file name="c:\w2.xml">
    <word>Text</word>
    <number>67</number>
  </file>
</block1>
+1  A: 

You need to use an XML Query language. I would recommend LINQ to XML if you're using .Net 3.5 or XPath if you're using something earlier. XPath has the advantage of being an industry standard, but LINQ to XML is a much 'cleaner' API, in my opinion.

How to query XML with an XPath expression by using Visual C# - Tutorial on using XPath

LINQ to XML Video Tutorial

MSDN XPath Examples - From the XPath Reference

Location Paths - Includes text() function for example.

kervin
+5  A: 

LINQ to XML is a great place to start. Consider the following code to parse your XML.

string xml = @"<?xml version=""1.0"" encoding=""utf-8""?> 
<block1> 
  <file name=""c:\w0.xml""> 
    <word>Text</word> 
    <number>67</number> 
   </file> 
  <file name=""c:\w1.xml""> 
    <word>Text</word> 
    <number>67</number> 
  </file> 
  <file name=""c:\w2.xml""> 
    <word>Text</word> 
    <number>67</number> 
  </file> 
</block1>";

XDocument document = XDocument.Parse(xml);

var block = from file in document.Descendants("file")
            select new
            {
                Name = file.Attribute ("name").Value,
                Word = file.Element("word").Value,
                Number = (int)file.Element("number")
            };

foreach (var file in block)
{
    Console.WriteLine("{0}\t{1}\t{2}", file.Name, file.Word, file.Number );
}

You can, of course, load the XML directly from a file using XDocument.Load instead of using Parse to read an XML string. XDocument is in the System.Xml.Linq namespace. Frankly, I would start there, but there are other options to work with XML in the System.Xml namespace (XmlReader.Create, etc.).

Anthony Pegram
@Anthony: not `XmlTextReader`. `XmlReader.Create`.
John Saunders
Thanks, John. Goes to show what I know. I've forgotten (almost) everything about other methods since LINQ came along! Very tragic.
Anthony Pegram