Ведущий «/» означает «начало в корне документа».Попробуйте просто:
xmlNode = xmlIter.SelectSingleNode("varlistentry/term/parameter");
p.Identifier = xmlNode.InnerText;
xmlNode = xmlIter.SelectSingleNode("varlistentry/term/listitem");
p.Documentation = xmlNode.InnerText;
(Если вы используете .NET 3.5 или более позднюю версию, я бы лично использовал LINQ to XML - я считаю, что это проще в использовании, чем XPath, но это другой вопрос. Я могупредоставьте эквивалентный код LINQ to XML, если хотите.)
РЕДАКТИРОВАТЬ: Понял.Ваш запрос [stuff]/variablelist/*
уже поступает в узел varlistentry
- вы пытаетесь найти другой узел varlistentry
ниже .Если вместо этого вы выберете все элементы varlistentry
, вам нужно будет найти только элементы term/parameter
и listitem
под этим varlistentry
.
Это работает:
foreach (XmlNode xmlIter in doc.SelectNodes
("/refentry/refsect1[@id='parameters']/variablelist/varlistentry"))
{
XmlNode xmlNode = xmlIter.SelectSingleNode("term/parameter");
Console.WriteLine("Identifier = {0}", xmlNode.InnerText);
xmlNode = xmlIter.SelectSingleNode("listitem");
Console.WriteLine("Documentation = {0}", xmlNode.InnerText);
}
MindВам, вероятно, все еще стоит проверить, что xmlNode
не равен NULL, прежде чем использовать его.