2016-07-05 90 views
0

使用XPath我有一個XML文件,如下如何LXML Python模塊

<?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

...已批准,這個問題不是關於XHTML,而是完全相同的問題(只是使用兩個不同的命名空間)。 –

回答

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=意味着一切都低於它使用的是默認命名空間),這是爲什麼原始查詢不匹配。

+0

嘗試使用代碼:loc = xmlobj.xpath('// s:url [priority = 1]/loc/text()',namespaces = nsmap)獲得loc的「priority = 1」,但得到空字符串,do你知道爲什麼 ? –

+0

'// s:url [s:priority = 1]/s:loc/text()',假設名稱空間以外的所有內容均正確。 –