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