将XPath与命名空间一起使用时出现无效的令牌错误

时间:2010-07-22 14:37:12

标签: c# xml xpath

我有以下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'的令牌无效。

2 个答案:

答案 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