使用xpath从XmlDocument获取节点

本文关键字:获取 节点 XmlDocument xpath 使用 | 更新日期: 2023-09-27 18:24:04

我有一个类似的XML文档

<?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>

(为简洁起见,已删除其余部分)

使用xmlspy,我已经将Ticket_NumberXPATH作为

/xmlTicket/TicketDataSet/TICKET/Ticket_Number

现在,当我尝试用这个代码获取C#中的节点时

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

nodenull

唯一一次得到非null值是当我将XPATH降低到xmlTicket时。

我是不是错过了一些东西来获得Ticket_Number的值?

使用xpath从XmlDocument获取节点

您必须使用XmlNamespaceManager作为命名空间。有关详细信息,请阅读MSDN文档。

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;