2017-07-07 2 views
0

Ich habe das folgende XML.Werte von untergeordneten Knoten aus XML abrufen | Python

Ich benutze ElementTree-Bibliothek, um die Werte zu kratzen.

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

Ich brauche die Werte aus 'Loc-Tag' zu bekommen.

gewünschte Ausgabe:

Test 1 
Test 2 
Test 3 

Versuchte Code:

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

Irgendwelche Vorschläge, wo ich falsch bin?

Antwort

1

Ihre XML hat einen Standard-Namespace (http://www.sitemaps.org/schemas/sitemap/0.9), so müssen Sie entweder alle Tags Adresse als:

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) 

oder einen Namensraum Karte zu definieren:

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

Ja. Ich habe es in der Nähe vergessen. Danke, dass du es bemerkt hast. Ja. Ich habe das angesprochen. Danke, dass du es aufgezeigt hast. – 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 

ist wahrscheinlich nicht die schönste Lösung, aber es funktioniert :)

+0

wir für den Text suchen, die im Inneren der ist tag? – user3476378

+0

Es überprüft alle Elemente in sitemap.xml, also URLSET Element URL Element () LOC Element () -> Text gefunden -> Text wurde gedruckt. URL-Element () LOC-Element -> Text gefunden -> Text wurde gedruckt. usw. –

Verwandte Themen