我有一个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)
有人可以帮我修复我的剧本吗?
答案 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=
表示其下方的所有内容都使用默认情况下该命名空间),这就是原始查询不匹配的原因。