Working with XML Processing Instructions in C#
page 2 of 3
by Michelle Beall
Feedback
Average Rating: This article has not yet been rated.
Views (Total / Last 10 Days): 45956/ 98

Accessing Processing Instructions

[ Download Code ]

So how do we access and read an existing processing instruction from an XML document?  Processing instructions can be selected just like any other node from a document.  The XPath uses a predicate processing-instruction() to test that the node is indeed a processing instruction. 

In the System.XML namespace there is a class called XmlProcessingInstruction.  When you select a single node from the XML document you can cast the returning XMLNode object to this type which will give you a nice interface to access the processing instruction's value.  To read the value, simply select the object's Value member.

To change the value of the processing instruction, simply assign the new string value to the object's Value member.

To add a new processing instruction to the XML document, use the CreateProcessingInstruction method of the XMLDocument class.  Then add the XmlProcessingInstruction object to the XML Document by using either the InsertBefore or InsertAfter method.

To delete an existing processing instruction from an XML Document, select the processing instruction node as before, but this time do not cast it to an XMLProcessingInstruction object.  Instead keep it as type XmlNode.  Then use the RemoveChild method of the XMLDocument class.

Everything is demonstrated in the following code.

// Get physical path of the XML document
string strPath = Server.MapPath("Sample.xml");  

// Load the contents of the XML document
XmlDocument doc = new XmlDocument();
doc.XmlResolver = null;
doc.Load(strPath);  

// display contents of original Sample.xml
txtSample.Text = doc.InnerXml.ToString().Replace("><", ">\r\n\n<");  

// read processing instruction from document
XmlProcessingInstruction pi = (XmlProcessingInstruction)doc.SelectSingleNode
                                  ("/processing-instruction(\"mso-infoPathSolution\")");  
// display processing instruction value
txtMsoInfoPathSolution.Text = pi.Value;  

// update processing instruction value
pi.Value = "updated value"// display updated processing instruction value
txtMsoInfoPathSolutionUpdated.Text = pi.Value; 

// create a new processing instruction
XmlProcessingInstruction piNew = doc.CreateProcessingInstruction
                                  ("new-pi", "my new processing instruction");  

// add processing instruction to the document
doc.InsertBefore(piNew, doc.ChildNodes[3]); 

// delete a processing instruction
XmlNode ndDel = doc.SelectSingleNode("/processing-instruction(\"mso-application\")");
doc.RemoveChild(ndDel);  

// display in memory changes of Sample.xml to 
// show updated and added processing instructions
txtSampleUpdated.Text = doc.InnerXml.ToString().Replace("><", ">\r\n\n<");

View Entire Article

User Comments

Title: re:   
Name: spam filter
Date: 2005-02-17 6:47:20 AM
Comment:
can you help me with an example in asp.net with c# to extract data from XML file and to display into table?
Thank you in advance.
Title: RE: Working with XML Processing Instructions in C#   
Name: Michelle
Date: 2004-11-21 11:42:16 AM
Comment:
Thanks for the great question!

Microsoft InfoPath uses processing instructions to tie the xml data generated by filling out a form to a specific InfoPath template (xsn) as well as to indicate that the xml should be rendered using the InfoPath Application. There are several cases where manipulating the PI would be useful, such as removing those PIs that bind the xml to InfoPath or to add your own PIs to bind to your own xml rendering solution. Another example where I've used PIs is to add information to an XML document without having to incorporate it into the data schema, such as default save location URL for saving the file to an alternative library in Sharepoint. So you can see there are lots of applications of using and manipulating PIs.
Title: Working with XML Processing Instructions in C#   
Name: Pankaja Shankar
Date: 2004-11-20 3:17:38 PM
Comment:
I was wondering when will this be of use. Could you please illustrate and explain a bit more in your response to my comment?

Thanks.






Community Advice: ASP | SQL | XML | Regular Expressions | Windows


©Copyright 1998-2019 ASPAlliance.com  |  Page Processed at 2019-07-22 5:01:12 PM  AspAlliance Recent Articles RSS Feed
About ASPAlliance | Newsgroups | Advertise | Authors | Email Lists | Feedback | Link To Us | Privacy | Search