2017-07-07 60 views
0

我有以下的XML。從XML中獲取來自子節點的值| Python

我正在使用ElementTree庫來刮取值。

<?xml version="1.0" encoding="UTF-8"?> 

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> 
<url>  
    <loc> Test1</loc> 
    </url> 
<url> 
    <loc>Test 2</loc> 
</url> 
<url> 
    <loc>Test 3</loc> 
</url> 
</urlset> 

我需要從'loc標記'中獲取值。

所需的輸出:

Test 1 
Test 2 
Test 3 

嘗試代碼:

tree = ET.parse('sitemap.xml') 
root = tree.getroot() 
for atype in root.findall('url'): 
rank = atype.find('loc').text 
print (rank) 

在哪裏我錯了什麼建議?

回答

1

你的XML有一個默認的命名空間(http://www.sitemaps.org/schemas/sitemap/0.9),所以你要麼必須解決所有的標籤,

tree = ET.parse('sitemap.xml') 
root = tree.getroot() 
for atype in root.findall('{http://www.sitemaps.org/schemas/sitemap/0.9}url'): 
    rank = atype.find('{http://www.sitemaps.org/schemas/sitemap/0.9}loc').text 
    print(rank) 

或定義命名空間地圖:

nsmap = {"ns": "http://www.sitemaps.org/schemas/sitemap/0.9"} 

tree = ET.parse('sitemap.xml') 
root = tree.getroot() 
for atype in root.findall('ns:url', nsmap): 
    rank = atype.find('ns:loc', nsmap).text 
    print(rank) 
+0

是的。我在附近忘了它。感謝您的注意。是啊。我解決這個問題。感謝您指出。 – user3476378

0
from lxml import etree 


tree = etree.parse('sitemap.xml') 
    for element in tree.iter('*'): 
     if element.text.find('Test') != -1: 
      print element.text 

可能不是最漂亮的解決方案,但它的工作原理:)

+0

我們正在尋找這裏面的文字標籤? – user3476378

+0

它將檢查sitemap.xml中的所有元素,所以 URLSET元素 URL元素() LOC元素() - >文本找到 - >文本打印出來。 URL元素() LOC元素 - >找到文本 - >打印文本。 等 –