У меня есть XML примерно так:
<?xml version="1.0"?>
<a xmlns="http://mynamespace">
<b>
<c val="test" />
<b>
</a>
И я пытаюсь найти значение атрибута 'val' в теге 'c' примерно так:
XmlDocument doc = new XmlDocument();
doc.Load("myxml.xml");
nsMgr = new XmlNamespaceManager(doc.NameTable);
nsMgr.AddNamespace(@"mns", "http://mynamespace");
XPathNavigator root = doc.CreateNavigator();
foreach (XPathNavigator nav in root.Select("//mns:c", nsMgr))
{
string val = nav.GetAttribute("val", NS);
Console.WriteLine("val == "+val);
}
Моя проблема в том, что GetAttribute всегда возвращается в виде пустой строки. Чего мне не хватает?
Обновление:
Кажется, я могу это исправить, передав пустую строку в GetAttribute, т.е.
string val = nav.GetAttribute("val", "");
Поэтому мой вопрос сейчас: почему это работает? Почему «val» не принадлежит моему пространству имен, несмотря на то, что XML был проверен по схеме, для которой требуется атрибут «val» (я случайно пропустил этот шаг в моем примере кода выше, но я проверяю XML).