Поскольку в вашем XML-файле есть
xmlns="http://xml"
, вам нужно добавить XmlNamespaceManager
, чтобы навигатор мог найти узлы. Если вы удалите xmlns="http://xml"
из своего XML, вам не нужно будет использовать XmlNamespaceManager
.
. Также метод Select
возвращает коллекцию узлов - вам нужно вызвать SelectSingleNode
, чтобы получитьузел, который вы хотите. EG
XPathDocument pdoc = new XPathDocument("Courses.xml");
XPathNavigator pNav = pdoc.CreateNavigator();
var manager = new XmlNamespaceManager(pNav.NameTable);
manager.AddNamespace("cs", "http://xml");
XPathNodeIterator iterator = pNav.Select("/cs:Courses/cs:Course", manager);
while(iterator.MoveNext())
{
var nameNode = iterator.Current.SelectSingleNode("cs:Name", manager);
string courseName = nameNode.Value;
var codeNode = iterator.Current.SelectSingleNode("cs:Code", manager);
codeNode.MoveToFirstAttribute();
string courseCode = codeNode.Value;
Console.WriteLine("{0} {1}", courseName, courseCode);
}
Когда вы попадаете на элемент Code
, вам нужно перейти к первому атрибуту, чтобы получить значение, в противном случае свойство Value
вернет пустую строку