Because
1 reason is that,,
YOU USED ‘ ‘ this quotation marks
dont use these.
Because
1 reason is that,,
YOU USED ‘ ‘ this quotation marks
dont use these.
//---------------------------------------------------------------------
// File: XPathValidator.cs
//
// Summary:
//
// Copyright (c) http://bizunitextensions.codeplex.com. All rights reserved.
//
// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
// PURPOSE.
//---------------------------------------------------------------------
using System;
using System.Xml.XPath;
using System.Xml;
namespace BizUnit.Extensions.Utilities
{
/// <summary>
/// A utility class which applies XPath expressions to xml files and returns the value
/// in a variety of data types
/// </summary>
public class XPathValidator
{
/// <summary>
/// basic constructor
/// </summary>
public XPathValidator()
{
//
// TODO: Add constructor logic here
//
}
/// <summary>
/// Evaluates the XPath expression and returns a string value
/// </summary>
/// <param name="InputXmlFile">full path of the xml file to parse</param>
/// <param name="XPathString">XPath expression to apply</param>
/// <returns>string</returns>
public string GetStringValue(string InputXmlFile,string XPathString)
{
string retval ;
object obj = MakeXPathExpression(InputXmlFile,XPathString);
retval = (string)obj;
return(retval);
}
/// <summary>
/// Evaluates the XPath expression and returns a integer value
/// </summary>
/// <param name="InputXmlFile">full path of the xml file to parse</param>
/// <param name="XPathString">XPath expression to apply</param>
/// <returns>int</returns>
public int GetIntegerValue(string InputXmlFile,string XPathString)
{
int retval ;
object obj = MakeXPathExpression(InputXmlFile,XPathString);
retval = System.Convert.ToInt32(obj);
return(retval);
}
/// <summary>
/// Evaluates the XPath expression and returns a bool value
/// </summary>
/// <param name="InputXmlFile">full path of the xml file to parse</param>
/// <param name="XPathString">XPath expression to apply</param>
/// <returns>bool</returns>
public bool GetBooleanValue(string InputXmlFile,string XPathString)
{
bool retval ;
object obj = MakeXPathExpression(InputXmlFile,XPathString);
retval = System.Convert.ToBoolean(obj);
return(retval);
}
private object MakeXPathExpression(string inputXmlFile,string XPathString)
{
XmlDocument xDoc = new XmlDocument();
xDoc.Load(inputXmlFile);
XPathNavigator nav = xDoc.CreateNavigator();
XPathExpression expr = nav.Compile( XPathString);
return(nav.Evaluate(expr));
}
}
}
Expression Description
/ Starts an absolute path that selects from the root node.
/Order/Items/Item selects all Item elements that are children of an Items element,
which is itself a child of the root Order element.
// Starts a relative path that selects nodes anywhere.
//Item/Name selects all the Name elements that are children of an Item element,
regardless of where they appear in the document.
@ Selects an attribute of a node.
/Order/@id selects the attribute named id from the root Order element.
* Selects any element in the path.
/Order/* selects both Items and Client nodes because both are contained by a root
Order element.
| Combines multiple paths.
/Order/Items/Item/Name|Order/Client/Name selects the Name nodes used to describe
a Client and the Name nodes used to describe an Item.
. Indicates the current (default) node.
If the current node is an Order, the expression ./Items refers to the related
items for that order.
.. Indicates the parent node.
//Name/.. selects any element that is parent to a Name, which includes the Client
and Item elements.
[ ] Define selection criteria that can test a contained node or attribute value.
/Order[@id="1999-01-30.195496"] selects the Order elements with the indicated
attribute value.
/Order/Items/Item[Price > 50] selects products above $50 in price.
/Order/Items/Item[Price > 50 and Name="Laser Printer"] selects products that match
two criteria.
starts-with This function retrieves elements based on what text a contained element starts with.
/Order/Items/Item[starts-with(Name, "C")] finds all Item elements that have a
Name element that starts with the letter C.
position This function retrieves elements based on position.
/Order/Items/Item[position ()=2] selects the second Item element.
count This function counts elements. You specify the name of the child element to count or
an asterisk (*) for all children.
/Order/Items/Item[count(Price) = 1] retrieves Item elements that have exactly one
nested Price element.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using System.Xml;
class Form1 : Form {
private XmlDocument mDocument;
private XmlNode mCurrentNode;
public Form1() {
InitializeComponent();
mDocument = new XmlDocument();
mDocument.Load("XPathQuery.xml");
mCurrentNode = mDocument.DocumentElement;
ClearListBox();
}
private void DisplayList(XmlNodeList nodeList) {
foreach (XmlNode node in nodeList) {
RecurseXmlDocumentNoSiblings(node, 0);
}
}
private void RecurseXmlDocumentNoSiblings(XmlNode root, int indent) {
if (root == null)
return;
if (root is XmlElement) {
listBoxResult.Items.Add(root.Name.PadLeft(root.Name.Length + indent));
if (root.HasChildNodes)
RecurseXmlDocument(root.FirstChild, indent + 2);
} else if (root is XmlText) {
string text = ((XmlText)root).Value;
listBoxResult.Items.Add(text.PadLeft(text.Length + indent));
} else if (root is XmlComment) {
string text = root.Value;
listBoxResult.Items.Add(text.PadLeft(text.Length + indent));
if (root.HasChildNodes)
RecurseXmlDocument(root.FirstChild, indent + 2);
}
}
private void RecurseXmlDocument(XmlNode root, int indent) {
if (root == null)
return;
if (root is XmlElement) {
listBoxResult.Items.Add(root.Name.PadLeft(root.Name.Length + indent));
if (root.HasChildNodes)
RecurseXmlDocument(root.FirstChild, indent + 2);
if (root.NextSibling != null)
RecurseXmlDocument(root.NextSibling, indent);
} else if (root is XmlText) {
string text = ((XmlText)root).Value;
listBoxResult.Items.Add(text.PadLeft(text.Length + indent));
} else if (root is XmlComment) {
string text = root.Value;
listBoxResult.Items.Add(text.PadLeft(text.Length + indent));
if (root.HasChildNodes)
RecurseXmlDocument(root.FirstChild, indent + 2);
if (root.NextSibling != null)
RecurseXmlDocument(root.NextSibling, indent);
}
}
private void ClearListBox() {
listBoxResult.Items.Clear();
}
private void radioButtonSelectRoot_CheckedChanged(object sender, EventArgs e) {
mCurrentNode = mCurrentNode.SelectSingleNode("//books");
ClearListBox();
RecurseXmlDocument(mCurrentNode, 0);
}
private void buttonClose_Click(object sender, EventArgs e) {
Application.Exit();
}
private void buttonExecute_Click(object sender, EventArgs e) {
if (textBoxQuery.Text == "")
return;
try {
XmlNodeList nodeList = mCurrentNode.SelectNodes(textBoxQuery.Text);
ClearListBox();
DisplayList(nodeList);
} catch (System.Exception err) {
MessageBox.Show(err.Message);
}
}
private void radioButtonSelectAllAuthors_CheckedChanged(object sender, EventArgs e) {
XmlNodeList nodeList = mCurrentNode.SelectNodes("//book/author");
ClearListBox();
DisplayList(nodeList);
}
private void radioButtonSelectSpecificAuthor_CheckedChanged(object sender, EventArgs e) {
XmlNodeList nodeList = mCurrentNode.SelectNodes("//book[author='J']");
ClearListBox();
DisplayList(nodeList);
}
private void radioButtonSelectAllBooks_CheckedChanged(object sender, EventArgs e) {
XmlNodeList nodeList = mCurrentNode.SelectNodes("//book");
ClearListBox();
DisplayList(nodeList);
}
private void radioButtonSetBookAsCurrent_CheckedChanged(object sender, EventArgs e) {
mCurrentNode = mCurrentNode.SelectSingleNode("book[title='C#']");
ClearListBox();
RecurseXmlDocumentNoSiblings(mCurrentNode, 0);
}
private void radioButtonSetBooksAsCurrent_CheckedChanged(object sender, EventArgs e) {
mCurrentNode = mCurrentNode.SelectSingleNode("//books");
ClearListBox();
RecurseXmlDocumentNoSiblings(mCurrentNode, 0);
}
private void radioButtonSelectAllChildren_CheckedChanged(object sender, EventArgs e) {
XmlNodeList nodeList = mCurrentNode.SelectNodes("*");
ClearListBox();
DisplayList(nodeList);
}
private void InitializeComponent() {
this.radioButtonSelectRoot = new System.Windows.Forms.RadioButton();
this.radioButtonSelectAllChildren = new System.Windows.Forms.RadioButton();
this.radioButtonSetBooksAsCurrent = new System.Windows.Forms.RadioButton();
this.radioButtonSetBookAsCurrent = new System.Windows.Forms.RadioButton();
this.radioButtonSelectAllBooks = new System.Windows.Forms.RadioButton();
this.radioButtonSelectSpecificAuthor = new System.Windows.Forms.RadioButton();
this.radioButtonSelectAllAuthors = new System.Windows.Forms.RadioButton();
this.textBoxQuery = new System.Windows.Forms.TextBox();
this.buttonExecute = new System.Windows.Forms.Button();
this.buttonClose = new System.Windows.Forms.Button();
this.listBoxResult = new System.Windows.Forms.ListBox();
this.SuspendLayout();
this.radioButtonSelectRoot.AutoSize = true;
this.radioButtonSelectRoot.Location = new System.Drawing.Point(13, 234);
this.radioButtonSelectRoot.Size = new System.Drawing.Size(72, 17);
this.radioButtonSelectRoot.Text = "Select root";
this.radioButtonSelectRoot.CheckedChanged += new System.EventHandler(this.radioButtonSelectRoot_CheckedChanged);
this.radioButtonSelectAllChildren.AutoSize = true;
this.radioButtonSelectAllChildren.Location = new System.Drawing.Point(163, 282);
this.radioButtonSelectAllChildren.Size = new System.Drawing.Size(104, 17);
this.radioButtonSelectAllChildren.Text = "Select all children";
this.radioButtonSelectAllChildren.CheckedChanged += new System.EventHandler(this.radioButtonSelectAllChildren_CheckedChanged);
this.radioButtonSetBooksAsCurrent.AutoSize = true;
this.radioButtonSetBooksAsCurrent.Location = new System.Drawing.Point(163, 258);
this.radioButtonSetBooksAsCurrent.Size = new System.Drawing.Size(120, 17);
this.radioButtonSetBooksAsCurrent.Text = "Set Books as current";
this.radioButtonSetBooksAsCurrent.CheckedChanged += new System.EventHandler(this.radioButtonSetBooksAsCurrent_CheckedChanged);
this.radioButtonSetBookAsCurrent.AutoSize = true;
this.radioButtonSetBookAsCurrent.Location = new System.Drawing.Point(163, 234);
this.radioButtonSetBookAsCurrent.Size = new System.Drawing.Size(115, 17);
this.radioButtonSetBookAsCurrent.Text = "Set Book as current";
this.radioButtonSetBookAsCurrent.CheckedChanged += new System.EventHandler(this.radioButtonSetBookAsCurrent_CheckedChanged);
this.radioButtonSelectAllBooks.AutoSize = true;
this.radioButtonSelectAllBooks.Location = new System.Drawing.Point(13, 306);
this.radioButtonSelectAllBooks.Size = new System.Drawing.Size(96, 17);
this.radioButtonSelectAllBooks.Text = "Select all books";
this.radioButtonSelectAllBooks.CheckedChanged += new System.EventHandler(this.radioButtonSelectAllBooks_CheckedChanged);
this.radioButtonSelectSpecificAuthor.AutoSize = true;
this.radioButtonSelectSpecificAuthor.Location = new System.Drawing.Point(13, 282);
this.radioButtonSelectSpecificAuthor.Size = new System.Drawing.Size(137, 17);
this.radioButtonSelectSpecificAuthor.Text = "Select by specific author";
this.radioButtonSelectSpecificAuthor.CheckedChanged += new System.EventHandler(this.radioButtonSelectSpecificAuthor_CheckedChanged);
this.radioButtonSelectAllAuthors.AutoSize = true;
this.radioButtonSelectAllAuthors.Location = new System.Drawing.Point(13, 258);
this.radioButtonSelectAllAuthors.Margin = new System.Windows.Forms.Padding(3, 1, 3, 3);
this.radioButtonSelectAllAuthors.Size = new System.Drawing.Size(102, 17);
this.radioButtonSelectAllAuthors.Text = "Select all authors";
this.radioButtonSelectAllAuthors.CheckedChanged += new System.EventHandler(this.radioButtonSelectAllAuthors_CheckedChanged);
this.textBoxQuery.Location = new System.Drawing.Point(13, 330);
this.textBoxQuery.Size = new System.Drawing.Size(385, 20);
this.buttonExecute.Location = new System.Drawing.Point(323, 234);
this.buttonExecute.Text = "Execute";
this.buttonExecute.Click += new System.EventHandler(this.buttonExecute_Click);
this.buttonClose.Location = new System.Drawing.Point(405, 13);
this.buttonClose.Text = "Close";
this.buttonClose.Click += new System.EventHandler(this.buttonClose_Click);
this.listBoxResult.FormattingEnabled = true;
this.listBoxResult.Location = new System.Drawing.Point(13, 13);
this.listBoxResult.Size = new System.Drawing.Size(385, 212);
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(492, 362);
this.Controls.Add(this.listBoxResult);
this.Controls.Add(this.buttonClose);
this.Controls.Add(this.buttonExecute);
this.Controls.Add(this.textBoxQuery);
this.Controls.Add(this.radioButtonSelectAllAuthors);
this.Controls.Add(this.radioButtonSelectSpecificAuthor);
this.Controls.Add(this.radioButtonSelectAllBooks);
this.Controls.Add(this.radioButtonSetBookAsCurrent);
this.Controls.Add(this.radioButtonSetBooksAsCurrent);
this.Controls.Add(this.radioButtonSelectAllChildren);
this.Controls.Add(this.radioButtonSelectRoot);
this.Text = "XPath Queries";
this.ResumeLayout(false);
this.PerformLayout();
}
private System.Windows.Forms.RadioButton radioButtonSelectRoot;
private System.Windows.Forms.RadioButton radioButtonSelectAllChildren;
private System.Windows.Forms.RadioButton radioButtonSetBooksAsCurrent;
private System.Windows.Forms.RadioButton radioButtonSetBookAsCurrent;
private System.Windows.Forms.RadioButton radioButtonSelectAllBooks;
private System.Windows.Forms.RadioButton radioButtonSelectSpecificAuthor;
private System.Windows.Forms.RadioButton radioButtonSelectAllAuthors;
private System.Windows.Forms.TextBox textBoxQuery;
private System.Windows.Forms.Button buttonExecute;
private System.Windows.Forms.Button buttonClose;
private System.Windows.Forms.ListBox listBoxResult;
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.Run(new Form1());
}
}
using System;
using System.Xml;
public class SellItems {
static void Main(string [] args) {
XmlDocument inventory = new XmlDocument();
inventory.Load("inventory.xml");
XmlNodeList elements = inventory.SelectNodes("//inventory/items/item");
foreach (XmlElement element in elements) {
string productCode = element.GetAttribute("productCode");
int quantitySold = Int32.Parse(element.GetAttribute("quantity"));
Console.WriteLine(quantitySold);
string xPathExpression = "//items/item[@productCode='" + productCode + "']";
XmlElement inventoryItem = (XmlElement)inventory.SelectSingleNode(xPathExpression);
int quantity = Int32.Parse(inventoryItem.GetAttribute("quantity"));
quantity -= quantitySold;
inventoryItem.SetAttribute("quantity",quantity.ToString());
}
inventory.Save("inventory.xml");
}
}
/*
<inventory>
<date year="2006" month="8" day="27" />
<items>
<item quantity="5" productCode="01" description="PHP" unitCost="9.95" />
<item quantity="3" productCode="02" description="Perl" unitCost="4.95" />
</items>
</inventory>
*/
using System;
using System.Xml;
using System.Xml.XPath;
public class XPathQuery {
public static void Main(string [] args) {
string filename = "inventory.xml";
string xpathExpression = "//inventory/items";
XmlDocument document = new XmlDocument( );
document.Load(filename);
XmlTextWriter writer = new XmlTextWriter(Console.Out);
writer.Formatting = Formatting.Indented;
XmlNode node = document.SelectSingleNode(xpathExpression);
node.WriteTo(writer);
writer.Close( );
}
}
/*
<inventory>
<date year="2006" month="8" day="27" />
<items>
<item quantity="5" productCode="01" description="PHP" unitCost="9.95" />
<item quantity="3" productCode="02" description="Perl" unitCost="4.95" />
</items>
</inventory>
*/
using System;
using System.Xml;
public class XPathSelectNodes {
private static void Main() {
// Load the document.
XmlDocument doc = new XmlDocument();
doc.Load("books.xml");
XmlNodeList nodes = doc.SelectNodes("/books/A/B");
foreach (XmlNode node in nodes) {
Console.WriteLine(node.InnerText);
}
}
}
/*
<books>
<A property="a">
<B>text</B>
<C>textg</C>
<D>99999</D>
</A>
</books>
*/