1

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

1 回答 1

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”)混淆。

于 2013-02-05T01:09:45.233 回答