Reputation: 2282
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
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