将下划线和句点与 XPath 一起使用

本文关键字:一起 XPath 下划线 句点 | 更新日期: 2023-09-27 18:33:51

我需要选择一个具有属性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>

将下划线和句点与 XPath 一起使用

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

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 的外观,那么您需要使用的命名空间 URI IKS:

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