使用SelectSingleNode()方法需要哪个命名空间(使用默认命名空间而不能使用该方法)

时间:2013-02-05 00:36:32

标签: c# xml xmldocument msxml selectsinglenode

您好我有使用不同命名空间的

的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);

1 个答案:

答案 0 :(得分:2)

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