2017-07-07 20 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要素 - >テキストが見つかりました - >テキストが印刷されました。 など –

関連する問題