We help IT Professionals succeed at work.

XMLReader question

Arnold Layne
Arnold Layne asked
on
409 Views
Last Modified: 2014-01-02
Here is the source code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            ReadXML();
            Console.ReadLine();
        }

        static void ReadXML()
        {
            XmlReader reader = XmlReader.Create(@Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\test1.xml");
            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.Text)
                {
                    Console.WriteLine(reader.Value);
                }
            }
            reader.Close();

            reader = XmlReader.Create(@Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\test1.xml");
            while(reader.ReadToFollowing("chapter"))
            {
                Console.WriteLine("read to following method value " + reader.ReadInnerXml());
            }

        }


    }
}

Open in new window


XML file
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<chapters total="2">
  <chapter>chapter1</chapter>
  <chapter>chapter2</chapter>
</chapters>

Open in new window



Both sections print out the same thing, chapter1 and chapter2.

Why does the first section of the code have to use reader.Value and the second section has to use reader.ReadInnerXML? If I swap the two or use one of the two in both instances, it does not work. So they are not interchangeable
Comment
Watch Question

Imran Javed ZiaConsultant Software Engineer - .NET Architect
CERTIFIED EXPERT

Commented:
Carl TawnSenior Systems and Integration Developer
CERTIFIED EXPERT
Commented:
This one is on us!
(Get your first solution completely free - no credit card required)
UNLOCK SOLUTION
Arnold LayneDeveloper

Author

Commented:
Hi Imran, thanks for your answer. Your links seem to explain how the XMLReader class works and how the Read method works, but I didn't see any explanation in your links as to when and why someone would use value to get the value and when and why someone should use ReadInnerXML instead. I understand what the Read Method and the Readtofollowing method are doing but I don't understand why the value in the element is accessed two different ways, depending upon which reading method is used.
Arnold LayneDeveloper

Author

Commented:
Hi Carl, your answer seems to be close and you seem to understand my question.  Chapter is a text element, so after calling readtofollowing("chapter"), it is already on a text element. So why would I need to call read again to get to a text element before I can call read.value? And what is the key difference between the Read.Value and ReadInnerXML method? They both seem to do the same thing, assuming the element that has been read to, is a text element.
Senior Systems and Integration Developer
CERTIFIED EXPERT
Commented:
This one is on us!
(Get your first solution completely free - no credit card required)
UNLOCK SOLUTION
Arnold LayneDeveloper

Author

Commented:
First answer was correct, but second answer told me the key difference to understand and I saw this exact behavior when I ran it in the debugger, which I should have done initially. So the Read method will take you to the text node portion of an element node, while readtofollowing takes you to the element node itself, but not it's inner text node, and therefore needs to call ReadInnerXML to get the value from the text node portion of the element rather than merely calling .Value as it would be able to if the cursor were actually on the text node portion.

Gain unlimited access to on-demand training courses with an Experts Exchange subscription.

Get Access
Why Experts Exchange?

Experts Exchange always has the answer, or at the least points me in the correct direction! It is like having another employee that is extremely experienced.

Jim Murphy
Programmer at Smart IT Solutions

When asked, what has been your best career decision?

Deciding to stick with EE.

Mohamed Asif
Technical Department Head

Being involved with EE helped me to grow personally and professionally.

Carl Webster
CTP, Sr Infrastructure Consultant
Empower Your Career
Did You Know?

We've partnered with two important charities to provide clean water and computer science education to those who need it most. READ MORE

Ask ANY Question

Connect with Certified Experts to gain insight and support on specific technology challenges including:

  • Troubleshooting
  • Research
  • Professional Opinions
Unlock the solution to this question.
Join our community and discover your potential

Experts Exchange is the only place where you can interact directly with leading experts in the technology field. Become a member today and access the collective knowledge of thousands of technology experts.

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.