获取XML中的项目 Python

huangapple go评论61阅读模式
英文:

Get items from xml Python

问题

在Python中,您可以使用以下代码来从XML中获取"Items"标签中的元素并创建一个可迭代的列表:

import xml.etree.ElementTree as ET

# 假设您已经有了XML数据,可以将其存储在变量stringBase64中
# 这里假设stringBase64包含了您提供的XML数据

# 将XML字符串解析为Element对象
xml = ET.fromstring(stringBase64)

# 找到包含所需数据的CDATA部分
cdata = xml.find('.//detalle').text

# 解析CDATA部分中的XML数据
tixml = ET.fromstring(cdata)

# 初始化一个空的可迭代列表以存储元素
items_list = []

# 遍历"item"元素
for item in tixml.findall('.//item'):
    nombre = item.find('.//nombre').text
    valor = item.find('.//valor').text
    iva_tax = item.find('.//data/tax[@name="iva"]').attrib['value']

    # 将元素信息添加到列表
    item_info = f"Item: {nombre}, value ${valor}, iva_tax: {iva_tax}"
    items_list.append(item_info)

# 现在,items_list 包含了您所需的可迭代列表

以上代码将解析XML中的"Items"标签,提取每个项目的名称、价值和IVA税,然后将这些信息存储在一个可迭代的列表中。

英文:

I have an xml in python, need to obtain the elements of the "Items" tag in an iterable list.

I need get a iterable list from this XML, for example like it:

  • Item 1: Bicycle, value $250, iva_tax: 50.30
  • Item 2: Skateboard, value $120, iva_tax: 25.0
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data>
	<info>Listado de items</info>
	<detalle>
		<![CDATA[<?xml version="1.0" encoding="UTF-8"?>
		<tienda id="tiendaProd" version="1.1.0">
			<items>
				<item>
					<nombre>Bicycle</nombre>
					<valor>250</valor>
                    <data>
                    	<tax name="iva" value="50.30"></tax>
                    </data>
				</item>
				<item>
					<nombre>Skateboard</nombre>
					<valor>120</valor>
                    <data>
                    	<tax name="iva" value="25.0"></tax>
                    </data>
				</item>
				<item>
					<nombre>Motorcycle</nombre>
					<valor>900</valor>
                    <data>
                    	<tax name="iva" value="120.50"></tax>
                    </data>
				</item>
			</items>
		</tienda>]]>
	</detalle>
</data>

I am working with
import xml.etree.ElementTree as ET

for example

import xml.etree.ElementTree as ET

xml = ET.fromstring(stringBase64)
ite = xml.find('.//detalle').text
tixml = ET.fromstring(ite)

答案1

得分: -1

你可以使用BeautifulSoup4(BS4)来完成这个任务。

from bs4 import BeautifulSoup

# 读取XML文件
with open("example.xml", "r") as f:
    contents = f.readlines()

# 创建Soup对象
soup = BeautifulSoup(contents, 'xml')

# 查找所有的item标签
item_tags = soup.find_all("item")  # 返回所有在<item>标签中的内容

# 在每个item中查找nombre和valor标签
results = {}
for item in item_tags:
    num = item.find("nombre").text
    val = item.find("valor").text
    results[str(num)] = val

# 打印包含XML中键值对的字典
print(results)
英文:

You can use BeautifulSoup4 (BS4) to do this.

from bs4 import BeautifulSoup

#Read XML file
with open(&quot;example.xml&quot;, &quot;r&quot;) as f:
    contents = f.readlines()

#Create Soup object
soup = BeautifulSoup(contents, &#39;xml&#39;)

#find all the item tags
item_tags = soup.find_all(&quot;item&quot;) #returns everything in the &lt;item&gt; tags

#find the nombre and valor tags within each item
results = {}
for item in item_tags:
    num = item.find(&quot;nombre&quot;).text
    val = item.find(&quot;valor&quot;).text
    results[str(num)] = val

#Prints dictionary with key value pairs from the xml
print(results)


huangapple
  • 本文由 发表于 2023年2月8日 22:57:07
  • 转载请务必保留本文链接:https://go.coder-hub.com/75387583.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定