Мне нужно работать с Глобальным списком из TFS. Я скачал его, и у меня есть доступ к XML, который имеет пространство имен. Я создал XmlNamespaceManager
, но у меня все еще есть проблемы с получением нужного мне узла. Для тех, кто не знаком, Глобальный список TFS выглядит следующим образом:
<gl:GLOBALLISTS xmlns:gl="http://schemas.microsoft.com/VisualStudio/2005/workitemtracking/globallists">
<GLOBALLIST name="Builds">
<LISTITEM value="..." />
</GLOBALLIST>
...
<GLOBALLIST name="Client Name">
<LISTITEM value="Test" />
После загрузки глобального списка в XmlDocument
я использую следующий код, чтобы попытаться извлечь тестовый узел, но я получаю нулевое значение обратно.
Dim globalList As XmlDocument = store.ExportGlobalLists()
Dim nsManager As XmlNamespaceManager = New XmlNamespaceManager(globalList.NameTable)
nsManager.AddNamespace("gl", "http://schemas.microsoft.com/VisualStudio/2005/workitemtracking/globallists")
Dim node As XmlNode = globalList.SelectSingleNode("//gl:GLOBALLISTS/gl:GLOBALLIST[@name='Client Name']/gl:LISTITEM[@value='" + Name + "']", nsManager)
Как примечание, имя, которое я ищу, существует. Я также попробовал следующее в ближайшем окне:
globalList.SelectNodes("/gl:GLOBALLISTS", nsManager)
Expression has been evaluated and has no value
globalList.SelectSingleNode("//gl:GLOBALLISTS/gl:GLOBALLIST[name='Client Name']/gl:LISTITEM[value='" + Name + "']", nsManager)
Expression has been evaluated and has no value
globalList.SelectSingleNode("//gl:GLOBALLIST[name='Client Name']/gl:LISTITEM[value='" + Name + "']", nsManager)
Expression has been evaluated and has no value
globalList.SelectSingleNode("//gl:GLOBALLIST[name='Client Name']", nsManager)
Expression has been evaluated and has no value
globalList.SelectSingleNode("//gl:GLOBALLIST", nsManager)
Expression has been evaluated and has no value
globalList.SelectSingleNode("//gl:GLOBALLISTS/GLOBALLIST[name='Client Name']/LISTITEM[value='Test']", nsManager)
Expression has been evaluated and has no value
globalList.SelectSingleNode("/gl:GLOBALLISTS/gl:GLOBALLIST[@name='Client Name']/gl:LISTITEM[@value='" + Name + "']", nsManager)
Expression has been evaluated and has no value
РЕШЕНИЕ
Мне пришлось убрать ссылки на пространство имен, за исключением первого узла, и добавить знак @ для доступа к атрибутам, как предложено в ответе ниже.
Dim node As XmlNode = globalList.SelectSingleNode("//gl:GLOBALLISTS/GLOBALLIST[@name='Client Name']/LISTITEM[@value='" + Name + "']", nsManager)