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