如何访问含冒号的XPath路径?rtr:altId访问问题求助
解决XPath/CSS选择器中含命名空间前缀(冒号)元素的访问问题
XPath 解决方案
你的问题核心是XPath中的冒号属于XML命名空间前缀,直接书写会因未识别命名空间导致失效,有两种可靠解决方式:
- 方式一:补全
name()的完整路径
你之前的写法仅匹配根节点下的元素,需把路径补全到目标父节点,正确写法如下:
也可以更精准地匹配命名空间和本地名称:/newsMessage/itemSet/newsItem[2]/contentSet/remoteContent[3]/*[name()='rtr:altId']/newsMessage/itemSet/newsItem[2]/contentSet/remoteContent[3]/*[local-name()='altId' and namespace-uri()='http://你的rtr命名空间URI'] - 方式二:注册命名空间前缀
如果使用的工具/语言支持注册命名空间(比如Python的lxml、Java的XPathAPI),先绑定rtr前缀到对应的命名空间URI,之后就能直接使用原路径:/newsMessage/itemSet/newsItem[2]/contentSet/remoteContent[3]/rtr:altId
CSS 选择器解决方案
CSS里处理带命名空间的元素,有两种写法:
- 方式一:使用命名空间分隔符
|
若工具支持识别命名空间前缀,可直接用|替代冒号,对应路径写法:newsMessage > itemSet > newsItem:nth-child(2) > contentSet > remoteContent:nth-child(3) > rtr|altId - 方式二:用属性选择器匹配标签名
若工具不支持命名空间语法,可通过匹配元素名称属性定位:
同样可以精准匹配本地名称和命名空间(部分工具支持):newsMessage > itemSet > newsItem:nth-child(2) > contentSet > remoteContent:nth-child(3) > *[name='rtr:altId']newsMessage > itemSet > newsItem:nth-child(2) > contentSet > remoteContent:nth-child(3) > *[local-name='altId' and namespace-uri='http://你的rtr命名空间URI']
内容的提问来源于stack exchange,提问作者user48290
相关产品推荐
相关产品推荐

