Динамическая версия vb SelectSingleNode

#xml #vb.net #xmldocument

#xml #vb.net #xmldocument

Вопрос:

Я знаю, что с

 book = root.SelectSingleNode("descendant::bk:book[bk:author/bk:last-name='Atwood']", nsmgr);
  

можно адресовать элементы внутри XML-файла статическим образом.

Есть ли способ использовать аналогичную схему, но с динамической адресацией. Например. где ‘Дерево’ не является постоянной строкой, а не динамической строкой.

Спасибо за помощь.

Кстати: пример с сайта справки Microsoft

Комментарии:

1. Разве вы не можете просто иметь строку «форматирования» с заполнителем и использовать (например) String.Format для встраивания значений переменных и построения этого «запроса»?

2. Perfect Sehnsucht. Спасибо.

Ответ №1:

SelectSingleNode() Получаемое выражение XPath представляет собой просто строку. Вы должны иметь возможность использовать любой подход, применимый для динамического построения строки в VB, т.е. Простое объединение строк :

 lastname = "Atwood"
query = "descendant::bk:book[bk:author/bk:last-name='" amp; lastname amp; "']"
book = root.SelectSingleNode(query, nsmgr)
  

String.Format() как упоминалось в комментарии :

 lastname = "Atwood"
query = "descendant::bk:book[bk:author/bk:last-name='{0}']"
book = root.SelectSingleNode(String.Format(query, lastname), nsmgr)
  

… или используя новую функцию из VB 14, интерполяцию строк :

 lastname = "Atwood"
query = $"descendant::bk:book[bk:author/bk:last-name='{lastname}']"
book = root.SelectSingleNode(query, nsmgr)
  

Для справки :