我有以下XML:
<ns:response xmlns:ns="http://example.com" xmlns:ax="http://example.com/xsd" >
<ns:return type="mytype">
<ax:roleID>1</ax:roleID>
<ax:roleName>ADM</ax:roleName>
</ns:return>
<ns:return type="mytype">
<ax:roleID>2</ax:roleID>
<ax:roleName>USR</ax:roleName>
</ns:return>
</ns:response>
获取所有roleNames(ADM,USR)的XPath表达式是什么样的?
这不起作用:
ns:response/ns:return/ax:roleName ns http://example.com ax http://example.com/xsd
当我使用它时,我得到了异常
'ns:response / ns:return / ax:roleName ns http://example.com ax http://example.com/xsd'的令牌无效。
答案 0 :(得分:2)
如果您使用XmlDocument.SelectNodes
方法,则应使用"ns:response/ns:return/ax:roleName"
作为XPath并将名称空间添加到XmlNamespaceManager
:
man.AddNamespace("ns", "http://example.com");
man.AddNamespace("ax", "http://example.com/xsd");
var set = doc.SelectNodes("ns:response/ns:return/ax:roleName", man);
答案 1 :(得分:0)
我认为你只需要指定ns的incex:return,因为它不止一个:
ns:response/ns:return[1]/ax:roleName