如何在lxml python模块中使用XPath

时间:2016-07-05 17:33:56

标签: python xml xpath xml-parsing lxml

我有一个xml文件,如下所示

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
 <url>
  <loc>https://ezinearticles.com/</loc>
  <changefreq>hourly</changefreq>
  <priority>1.0</priority>
 </url>
 <url>
  <loc>https://ezinearticles.com/submit/</loc>
  <changefreq>weekly</changefreq>
  <priority>0.3</priority>
 </url>
 ...................

我想使用xpathin lxml模块从所有标记中获取URL。我实现它如下面的代码,但它没有工作。结果是空列表

from lxml import etree
parser = etree.XMLParser(ns_clean=True)
xmlfile = "sitemap1.xml"
xmlobj = etree.parse(xmlfile, parser)

loc = xmlobj.xpath('//loc[text()]')

print(loc)

有人可以帮我修复我的剧本吗?

1 个答案:

答案 0 :(得分:1)

# define a namespace map
nsmap={'s': 'http://www.sitemaps.org/schemas/sitemap/0.9'}

# use it in your query
loc = xmlobj.xpath('//s:loc[text()]', namespaces=nsmap)

在原始代码中,您正在寻找loc(在默认命名空间中),但该元素实际上是{http://www.sitemaps.org/schemas/sitemap/0.9}loc(因为xmlns=表示其下方的所有内容都使用默认情况下该命名空间),这就是原始查询不匹配的原因。