从XML中获取来自子节点的值| Python

问题描述:

我有以下的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) 

在哪里我错了什么建议?

你的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

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元素 - >找到文本 - >打印文本。 等 –