在XPath中使用下划线和句点

时间:2014-12-10 09:33:12

标签: c# asp.net .net xpath xml-namespaces

我需要选择属性name_1.1.1

的节点

我正在尝试将节点选为

XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);
nsmgr.AddNamespace("IKS", "http://schemas.microsoft.com/wix/2006/objects");    
XmlNode xRootNode = xmlDoc.SelectSingleNode("//folder[@name='Global']");

但它没有返回任何。我肯定是因为我表达中的特殊字符。我应该如何处理它以获得所需的节点?

编辑:我以

的身份访问节点
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);
nsmgr.AddNamespace("IKS", "http://schemas.microsoft.com/wix/2006/objects");    
XmlNode xRootNode = xmlDoc.SelectSingleNode("//folder[@name='Global']", nsmgr);

,XML是

<?xml version="1.0" encoding="UTF-8"?>
<workplace xmlns='IKS:'>
  <cabinet name='Groups%20and%20Departments' oid='_1.25.18'>
    <folder name='Global' oid='_1.11.9882'></folder>
  </cabinet>
</workplace>

1 个答案:

答案 0 :(得分:4)

你非常接近正确的方法。您已声明了名称空间前缀,但您需要实际使用它:

XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);
nsmgr.AddNamespace("IKS", "http://schemas.microsoft.com/wix/2006/objects");    
XmlNode xRootNode = xmlDoc.SelectSingleNode("//IKS:folder[@name='Global']");
//                                             ^^^^------- here

注意:出于某种原因,您的XML中有xmlns="IKS:"。如果这实际上是您的XML的样子,那么IKS:是您需要使用的名称空间URI:

XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);
nsmgr.AddNamespace("IKS", "IKS:");    
XmlNode xRootNode = xmlDoc.SelectSingleNode("//IKS:folder[@name='Global']");