首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >命名空间不起作用的XML上的GetSingleNode

命名空间不起作用的XML上的GetSingleNode
EN

Stack Overflow用户
提问于 2019-06-20 04:30:25
回答 1查看 57关注 0票数 0

我需要使用来自TFS的全局列表。我已经下载了它,并且可以访问xml,它有一个名称空间。我创建了一个XmlNamespaceManager,但是我仍然在获取所需的节点时遇到问题。对于那些不熟悉的人,TFS全局列表如下所示:

代码语言:javascript
复制
<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中后,我使用以下代码尝试提取测试节点,但得到的结果为空。

代码语言:javascript
复制
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)

顺便说一句,我正在搜索的名字确实存在。我还在“即时”窗口中尝试了以下操作:

代码语言:javascript
复制
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

解决方案

我必须去掉除第一个节点之外的名称空间引用,并添加@符号来访问属性,如下面的答案所示。

代码语言:javascript
复制
Dim node As XmlNode = globalList.SelectSingleNode("//gl:GLOBALLISTS/GLOBALLIST[@name='Client Name']/LISTITEM[@value='" + Name + "']", nsManager)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-20 06:08:09

在XPath中,使用@表示属性。这似乎就是你遇到问题的原因,因为你没有使用@

此外,正如您自己发现的那样,只有最外层的元素在名称空间中,所以只有第一个段应该有gl:

代码语言:javascript
复制
Dim node As XmlNode = globalList.SelectSingleNode("/gl:GLOBALLISTS/GLOBALLIST[@name='Client Name']/LISTITEM[@value='" + Name + "']", nsManager)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56675423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档