我有一个
XML文档,我加载并尝试使用XPath进行搜索.此文件中的根节点是< t:Transmission xmlns:t ='urn:InboundShipment'>并使用< / t:Transmission>正确关闭文件结束.
我的问题是我不能在不使用后代轴的情况下走树.换句话说,我可以这样做:SelectSingleNode(“// TransactionHeader [SHIPPERSTATE =’CA’]”)并获得一个节点作为回报.但是我不能做相应的事情:SelectSingleNode(“/ Transmission / TransmissionBody / Transaction / TransactionHeader [SHIPPERSTATE =’CA’]”)
如果我删除t:我可以在/ Transmission上进行XPath搜索并获取整个文件.随着t:在那里我得到null.或者,如果我尝试使用SelectSingleNode(“t:Transmission”),我的XPath语句出错.
我通常不需要查询根元素,所以我应该能够使用后代轴进行搜索.但XML看起来对我有用,所以我想知道如何解决这个问题.另外,我不想让客户删除“t:”只是因为我不知道如何处理它.
解决方法
“t:”是名称空间前缀,它绑定到名称空间“urn:InboundShipment”.为了正确处理它,你必须告诉c#绑定的前缀是什么.
This page应该解释如何使用System.Xml.XmlNamespaceManager来处理命名空间.
编辑:也见this answer.