В каком пространстве имен необходимо использовать метод 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 ответ

Решение

Вам нужно использовать правильное пространство имен, которое " 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 ".

Другие вопросы по тегам