使用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_Number
的XPATH
作为
/xmlTicket/TicketDataSet/TICKET/Ticket_Number
现在,当我尝试用这个代码获取C#
中的节点时
XmlNode node = xmlTicket.DocumentElement.SelectSingleNode("/xmlTicket/TicketDataSet/TICKET/Ticket_Number");
string nodeval = node.InnerText;
node
是null
。
唯一一次得到非null值是当我将XPATH降低到xmlTicket
时。
我是不是错过了一些东西来获得Ticket_Number
的值?
您必须使用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;