Python如何获取XML文档中最后一个j151标签的内容?
解决XML中获取最后一个j151标签内容的问题
嘿,作为Python新手遇到这种XML解析的小问题太正常了,我来帮你快速搞定!
问题分析
你现在的代码会遍历<supplydetail>下的所有<price>标签,每次都打印<j151>的文本内容,所以会输出所有四个值。而你需要的是文档中最后一个<price>标签里的<j151>内容(也就是172.00),其实不用循环所有price,直接定位最后一个就行。
修改后的代码方案
这里有两种直接的实现方式,根据你的需求选最适合的:
方案1:直接获取最后一个<price>标签的<j151>
这种方法最直接,因为你要的就是文档里最后一个price对应的j151:
import xml.etree.cElementTree as ET import pyodbc import mysql.connector import os tree = ET.parse('C:\\OnixFile\\Pearson_SA_20211027-160725999_onix.xml') root = tree.getroot() count = 0 for product in root.findall('product'): # Variables SurAndInit = pubType = language = subject = othertext = shortDesc = longDesc = currencyPrice= publisher ="" count = count + 1 for sd in product.findall('supplydetail'): supplydetail = sd.find('j137').text # 获取所有price标签,取最后一个 prices = sd.findall('price') if prices: # 防止没有price标签时报错 last_price = prices[-1] price = last_price.find('j151').text print(price) # 现在只会输出172.00
方案2:找到所有值为172.00的<j151>,再取最后一个(如果有多个符合的情况)
如果你的XML里可能有多个值为172.00的j151,而你要最后出现的那个,可以用这种方式:
import xml.etree.cElementTree as ET import pyodbc import mysql.connector import os tree = ET.parse('C:\\OnixFile\\Pearson_SA_20211027-160725999_onix.xml') root = tree.getroot() count = 0 for product in root.findall('product'): # Variables SurAndInit = pubType = language = subject = othertext = shortDesc = longDesc = currencyPrice= publisher ="" count = count + 1 matching_prices = [] for sd in product.findall('supplydetail'): supplydetail = sd.find('j137').text for pc in sd.findall('price'): j151_text = pc.find('j151').text if j151_text == '172.00': matching_prices.append(j151_text) # 取最后一个符合条件的 if matching_prices: print(matching_prices[-1])
关键说明
sd.findall('price')会返回当前<supplydetail>下所有<price>标签的列表,列表顺序和XML文档里的顺序一致,所以prices[-1]就是最后一个price标签。- 加上
if prices:的判断是为了避免当某个<supplydetail>下没有<price>标签时,代码出现索引错误。
内容的提问来源于stack exchange,提问作者LuckyDucky
相关产品推荐
相关产品推荐

