XML
Namespace
- If namespace isn’t correct, the SelectSingleNode will return null!
- If prefix has specified in xmlns, just like: xmlns:prefix_foo=”name-of-namespace”, all element under the namespace must specify this prefix explicitly. For example
<prefix_foo:book />
- Default Namespaces ( xmlns without prefix, for example: xmlns=”name-of-namespace” ): Defining a default namespace for an element saves us from using prefixes in all the child elements.
- Namespace also can be empty.
Specify a note that contains a value
// Get the note that which value is 'Atwood', using [] to filter the notes.
note = root.SelectSingleNode("/root/subnote[subsubnote='Atwood']/subsubnote");
Read Value Note
XmlNode.InnerText
Test XML file
<?xml version='1.0'?>
<bookstore xmlns="urn:newbooks-schema">
<book genre="novel" style="hardcover">
<title>The Handmaid's Tale</title>
<author>
<first-name>Margaret</first-name>
<last-name>Atwood</last-name>
</author>
<price>19.95</price>
</book>
<book genre="novel" style="other">
<title>The Poisonwood Bible</title>
<author>
<first-name>Barbara</first-name>
<last-name>Kingsolver</last-name>
</author>
<price>11.99</price>
</book>
</bookstore>
Test Code
using System;
using System.IO;
using System.Xml;
public class Sample
{
public static void Main()
{
XmlDocument doc = new XmlDocument();
doc.Load("newbooks.xml");
// Create an XmlNamespaceManager to resolve the default namespace.
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("bk", "urn:newbooks-schema");
// Select the first book written by an author whose last name is Atwood.
XmlNode book;
XmlElement root = doc.DocumentElement;
book = root.SelectSingleNode("descendant::bk:book[bk:author/bk:last-name='Atwood']", nsmgr);
Console.WriteLine(book.OuterXml);
}
}