Я не уверен на 100%, какие узлы вы ожидаете здесь, но основываясь на том, что вы пытались написать, я попытался реплицировать в масштабируемой форме.
В основном вам придется использовать содержимое массива для создания правильного XPath. Здесь у меня есть некоторые функции, чтобы помочь изменить эти списки исключений в соответствующее условие XPath. Лично я считаю, что с помощью LINQ и string.Join()
сделать это намного проще в написании и управлении.
// supporting methods to build parts of the string
static string ElementNotInList<T>(string element, params T[] list)
{
return String.Join(" and ", list.Select(x => String.Concat(element, "!=", x)));
}
static string ElementInList<T>(string element, params T[] list)
{
return String.Join(" or ", list.Select(x => String.Concat(element, "=", x)));
}
var excludeSubmenus = new[] { 2905, 323 };
var xpath = String.Join("|",
String.Format("//Menu[{0}]/Item[ItemLevel={1} and ItemType!='Javascript']",
ElementNotInList("MenuId", excludeSubmenus), iLevel),
String.Format("//Menu[{0}]/Item[ItemLevel={1} and ItemType='content']",
ElementInList("MenuId", excludeSubmenus), iLevel)
);
var nextLevelNodeList = currentNode.SelectNodes(xpath);