c# - 在 XPath 中使用下划线和句点

标签 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>

最佳答案

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

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']");

关于c# - 在 XPath 中使用下划线和句点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27397498/

相关文章:

.net - Visual Studio 窗口管理器

c# - C# 使用和 Java 导入之间的区别

c# - 如何查看文件系统目录以查看文件何时添加到其中?

c# - 鉴于 doubles 不能用于 volatile 字段,这是一个安全的选择吗?

asp.net - 一行中的 aspx 单选按钮控制列表

javascript - 如何在javascript中为radwindow设置navigateurl?

c# - 事务管理使用TransactionScope()

c# - Ado.Net 和 BigInteger 导致对 Int64 的无效转换异常

c# - 无法使用 c++/cli 包装器从 c# dll 加载函数

c# - 连接或添加字符串但不使用 string.Format 时出现内存碎片?