pithhelmet
pithhelmet

Reputation: 2282

Get node from XmlDocument using xpath

I have an XML document like this

<?xml version="1.0"?>
<xmlTicket>
 <TicketDataSet xmlns="http://tempuri.org/TicketDataSet.xsd">
   <TICKET> 
     <One_Call_Center>UFPO</One_Call_Center>
     <Ticket_Number>03192-000-001</Ticket_Number>
     <Version_Number>0</Version_Number>
     <Ticket_Type>Regular</Ticket_Type>
     <Primary_CDC></Primary_CDC>
   </TICKET>
   <....></....>
  </TicketDataSet>
</xmlTicket>

(the rest is removed for brevity)

Using xmlspy, I've pulled the XPATH for Ticket_Number as

/xmlTicket/TicketDataSet/TICKET/Ticket_Number

Now when I try to grab the node in C# with this code

XmlNode node = xmlTicket.DocumentElement.SelectSingleNode("/xmlTicket/TicketDataSet/TICKET/Ticket_Number");
string nodeval = node.InnerText;

The node is null.

The only time I get a non-null value is when I bring the XPATH down to xmlTicket.

Am I missing something to get the value of Ticket_Number?

Upvotes: 1

Views: 281

Answers (1)

Arghya C
Arghya C

Reputation: 10068

You have to use XmlNamespaceManager for the namespace. Read the MSDN doc for details.

var xmlString = File.ReadAllText(@"C:\YourDirectory\YourFile.xml");

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmlString);

XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);
nsmgr.AddNamespace("ds", "http://tempuri.org/TicketDataSet.xsd");

var node = xmlDoc.SelectSingleNode("//xmlTicket/ds:TicketDataSet/ds:TICKET/ds:Ticket_Number", nsmgr);
var ticketNumber = node.InnerText;

//OR, directly accessing the Ticket_Number node
string ticket_number = xmlDoc.SelectSingleNode("descendant::ds:Ticket_Number", nsmgr).InnerText;

Upvotes: 1

Related Questions