从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)
答
from lxml import etree
tree = etree.parse('sitemap.xml')
for element in tree.iter('*'):
if element.text.find('Test') != -1:
print element.text
可能不是最漂亮的解决方案,但它的工作原理:)
+0
我们正在寻找这里面的文字
+0
它将检查sitemap.xml中的所有元素,所以 URLSET元素 URL元素(
是的。我在附近忘了它。感谢您的注意。是啊。我解决这个问题。感谢您指出。 – user3476378