Listing 1

<xs:schema xmlns:xs="http://www.
w3.org/2001/XMLSchema">

<xs:element name="items">
<xs:complexType>
<xs:sequence>
<xs:element ref="compact- 
disc" minOccurs="0" 
maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="compact-disc">
<xs:complexType>
<xs:sequence>
<xs:element name="price" 
type="xs:decimal" />
<xs:element name="artist" 
type="xs:string" />
<xs:element name="title" 
type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>

</xs:schema>

Listing 2

using System; 
using System.Xml; 

public class Test{
public static void Main(string[] args){

string artist = null, title = null; 
XmlTextReader reader = new XmlTextReader("test.xml"); 

/* move from root node to document element (items) */ 
reader.MoveToContent();

/* keep reading until we get to the first <artist> element */
while(reader.Read()){

if((reader.NodeType == XmlNodeType.Element) && 
reader.Name.Equals("artist")){

artist = reader.ReadElementString();
title = reader.ReadElementString(); 
break; 
}
}
Console.WriteLine("Artist={0}, Title={1}", artist, title);
}
}

Listing 3

using System; 
using System.Xml.XPath; 

public class Test{

public static void Main(string[] args){

XPathDocument doc = new XPathDocument("test.xml"); 
XPathNavigator nav = doc.CreateNavigator(); 

nav.MoveToFirstChild(); //move from root node to document element (items)
nav.MoveToFirstChild(); //move from items element to first compact-disc element

//move from compact-disc element to artist element 
nav.MoveToFirstChild();
nav.MoveToNext(); 
string artist = nav.Value; 

//move from artist element to title element
nav.MoveToNext(); 
string title = nav.Value; 

Console.WriteLine("Artist={0}, Title={1}", artist, title);
}
}

Listing 4

public static void DumpTree(XPathNavigator nav, bool descending){


if(descending){

DumpTreeHelper(nav);

if(nav.MoveToFirstChild()){ 
DumpTree(nav, true); 
}else if(nav.MoveToNext()){
DumpTree(nav, true); 
}else{
nav.MoveToParent(); 
DumpTree(nav, false); 
}

}else{ //ascending

if(nav.MoveToNext()){
DumpTree(nav, true); 
}else if( nav.MoveToParent()){ 
DumpTree(nav, false); 
}else{
return; 

}

}



public static void DumpTreeHelper(XPathNavigator nav){

switch(nav.NodeType){

case XPathNodeType.Element:
Console.WriteLine("Element: " + nav.Name);

while (nav.MoveToNextAttribute())
Console.WriteLine("Attribute: " + nav.Name + "='" + nav.Value + "'");

break;
case XPathNodeType.Text:
Console.WriteLine("Text: " + nav.Value);
break;
case XPathNodeType.ProcessingInstruction:
Console.WriteLine("Processing Instructions:" + "<?" + nav.Name + " " +
nav.Value + "?>");
break;
case XPathNodeType.Comment:
Console.WriteLine("Comment: <!--" + nav.Value + "-->");
break; 
}

}



public static void DumpTree(XmlReader rdr)
{
//Read each node in the tree.
while (rdr.Read())
{
switch (rdr.NodeType)
{
case XmlNodeType.Element:
Console.WriteLine("Element: " + rdr.Name);

while (rdr.MoveToNextAttribute())
Console.WriteLine("Attribute: " + rdr.Name + "='" + rdr.Value + "'");

break;
case XmlNodeType.Text:
Console.WriteLine("Text: " + rdr.Value);
break;
case XmlNodeType.CDATA:
Console.WriteLine("CDATA: <![CDATA[" + rdr.Value + "]]>");
break;
case XmlNodeType.ProcessingInstruction:
Console.WriteLine("Processing Instructions:" + "<?" + rdr.Name + " " +
rdr.Value + "?>");
break;
case XmlNodeType.Comment:
Console.WriteLine("Comment: <!--" + rdr.Value + "-->");
break;
}
}
}

Listing 5

Element: items
Element: compact-disc
Element: price
Text: 16.95
Element: artist
Text: Nelly
Element: title
Text: Nellyville
Element: compact-disc
Element: price
Text: 17.55
Element: artist
Text: Baby D
Element: title
Text: Lil Chopper Toy

Element: items
Element: compact-disc
Element: price
Text: 16.95
Element: artist
Text: Nelly
Element: title
Text: Nellyville
Element: compact-disc
Element: price
Text: 17.55
Element: artist
Text: Baby D
Element: title
Text: Lil Chopper Toy

Listing 6

using System; 
using System.Xml; 

public class Test{

public static void Main(string[] args){

XmlDocument doc = new XmlDocument(); 
doc.Load("test.xml"); 

XmlElement firstCD = (XmlElement) doc.DocumentElement.FirstChild;
XmlElement artist = 
(XmlElement) firstCD.GetElementsByTagName("artist")[0];
XmlElement title =
(XmlElement) firstCD.GetElementsByTagName("title")[0]

Console.WriteLine("Artist={0}, Title={1}", artist.InnerText, title.InnerText);
}
}

Listing 7

using System; 
using System.Xml.XPath; 

public class Test{

public static void Main(string[] args){

XPathDocument doc = new XPathDocument("test.xml"); 
XPathNavigator nav = doc.CreateNavigator(); 

XPathNodeIterator iterator = nav.Select("/items/compact-disc[1]/artist |
/items/compact-disc[1]/title");

iterator.MoveNext();
Console.WriteLine("Artist={0}", iterator.Current.Value);

iterator.MoveNext();
Console.WriteLine("Title={0}", iterator.Current.Value);
}
}