其命名空间是必须使用的SelectSingleNode()方法(使用默认命名空间,并且不能使用的方法

2019-07-19 06:26发布

您好我有一个使用不同的命名空间的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);

Answer 1:

您需要使用正确的命名空间,这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 ”。



文章来源: Which namespace is necessary to use SelectSingleNode() method (using default namespace and can't use the method)