如何在xpath中转义正斜杠?

时间:2011-11-02 13:07:12

标签: python xml xpath lxml

如何在xpath查询中转义正斜杠字符?我的标签包含一个网址,所以我需要能够做到这一点。我在python中使用lxml。

或者,xpath是否可以查询路径的子字符串?示例如下:

xml="""
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:gsa="http://schemas.google.com/gsa/2007">
  <gsa:content name="reportName">bbb</gsa:content>
  <gsa:content name="collectionName">default_collection</gsa:content>
  <gsa:content name="reportDate">date_3_25_2009</gsa:content>
 </entry>
"""

当我运行以下内容时:

tree=fromstring(xml)
for elt in tree.xpath('//*'):
    elt.tag

它返回:

'{http://www.w3.org/2005/Atom}entry'
'{http://schemas.google.com/gsa/2007}content'
'{http://schemas.google.com/gsa/2007}content'
'{http://schemas.google.com/gsa/2007}content'

运行tree.xpath('/entry')会返回一个空列表。

我需要能够查询“{http://www.w3.org/2005/Atom}entry”作为标记,或者在标记的任何位置查询“条目”。

1 个答案:

答案 0 :(得分:3)

查看namespace prefixes[docs]

如果你想要一个http://schemas.google.com/gsa/2007命名空间中的元素,你需要像这样搜索它:

import lxml.etree as et

xml="""
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:gsa="http://schemas.google.com/gsa/2007">
  <gsa:content name="reportName">bbb</gsa:content>
  <gsa:content name="collectionName">default_collection</gsa:content>
  <gsa:content name="reportDate">date_3_25_2009</gsa:content>
 </entry>
"""

NS = {'rootns': 'http://www.w3.org/2005/Atom',
      'gsa': 'http://schemas.google.com/gsa/2007'}

tree = et.fromstring(xml)

for el in tree.xpath('//gsa:content', namespaces=NS):
    print el.attrib['name']

print len(tree.xpath('//rootns:entry', namespaces=NS))