gpt4 book ai didi

python - lxml iterparse,具有相同标签名称的 child

转载 作者:太空宇宙 更新时间:2023-11-04 03:25:42 25 4
gpt4 key购买 nike

我想从文件(1.5gb 文件)中动态解析 xml,如下所示:

<product product_id="x" name="x" sku_number="x">
<category>
<primary>x</primary>
<secondary>y</secondary>
</category>
<URL>
<product>URL__I_WANT_TO_PULLOUT</product>
<productImage>x</productImage>
</URL>
<description>
<short>x</short>
<long>x</long>
</description>
</product>

我正在使用 lxml.etree.iterparse,例如:

for event, elem in ET.iterparse(f, events=('end',), tag='product'):
save_product(elem)

我从 xml 节点获取所有必需的值。我无法拉出的唯一节点是 URL>product(它只是空的)。我认为这是由相同的标签名称引起的。除了 iterparse 之外,还有什么方法可以动态解析 xml?

最佳答案

如果我运行 etree.iterparse在你的样本上,它找到了 'product'标记两次:一个外部一个内部 <product> .外部标签有子元素及其 text是空的。所以你需要跳过那些外部'product'标签只适用于那些没有子元素的标签,例如:

for event, elem in etree.iterparse(f, events=('end',), tag='product'):
if not len(elem):
save_product(elem)

如果需要处理top product的所有元素标记可以删除所有内部 product主循环中的字段,然后按路径处理所有子元素,例如 python's lxml and iterparse method :

def save_product(elem):
cat_prim = elem.xpath('category/primary')[0].text;
cat_sec = elem.xpath('category/secondary')[0].text;
url_prod = elem.xpath('URL/product')[0].text;
url_img = elem.xpath('URL/productImage')[0].text;
desc_short = elem.xpath('description/short')[0].text;
desc_long = elem.xpath('description/long')[0].text;

for event, elem in etree.iterparse(f, events=('end',), tag='product'):
if len(elem):
save_product(elem)

关于python - lxml iterparse,具有相同标签名称的 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33083667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com