You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 13:49:08