哪个命名空间是使用SelectSingleNode()方法所必需的(使用默认命名空间,并且不能使用该方法)

本文关键字:方法 命名空间 默认 不能 SelectSingleNode | 更新日期: 2023-09-27 17:57:43

Hi我有一个使用不同命名空间的xml文件(实际上是msbuild文件)

<?xml version="1.0" ?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup Condition="'$(key)'=='1111'">
          <Key>Value</Key>
    </PropertyGroup>
</Project>

但问题是,由于的原因,我无法将SelectSingleNode与该文件一起使用

xmlns="http://schemas.microsoft.com/developer/msbuild/2003"

我相信这是因为默认名称空间(方法所必需的)由于上面的xmlns而消失了。那么我想我只需要为此添加一个必要的。。但我的尝试一点也不成功。你能给我一个如何做这件事的快速例子吗?

以下是我的做法。(我也尝试添加多个名称空间,但没有成功。)

XmlDocument xml = new XmlDocument();
xml.Load("ref.props");        
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xml.NameTable);
nsmgr.AddNamespace("msbld", "http://schemas.microsoft.com/developer/msbuild/2003");
XmlNode platform_node
  = xml.SelectSingleNode("//msbld:PropertyGroup[contains(@Condition, '1111')]", nsmgr);

哪个命名空间是使用SelectSingleNode()方法所必需的(使用默认命名空间,并且不能使用该方法)

您需要使用正确的命名空间,"http://schemas.microsoft.com/developer/msbuild/2003"。

尝试

XmlDocument xml = new XmlDocument();
xml.Load("ref.props");        
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xml.NameTable);
nsmgr.AddNamespace("ms", "http://schemas.microsoft.com/developer/msbuild/2003");
XmlNode platform_node
  = xml.SelectSingleNode("/ms:Project/ms:PropertyGroup[contains(@Condition, '1111')]",
                         nsmgr);

不要将名称空间前缀(在XML中为空)与名称空间(即"http://schemas.microsoft.com/developer/msbuild/2003")混淆。