元素树:如何解析子节点的子元素 [英] Element Tree: How to parse subElements of child nodes

查看:71
本文介绍了元素树:如何解析子节点的子元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个XML树,我想使用Elementtree进行解析。我的XML看起来像是

I have an XML tree, which I'd like to parse using Elementtree. My XML looks something like

<?xml version="1.0" encoding="UTF-8"?>
<GetOrdersResponse xmlns="urn:ebay:apis:eBLBaseComponents">
<Ack>Success</Ack>
<Version>857</Version>
<Build>E857_INTL_APIXO_16643800_R1</Build>
<PaginationResult>
    <TotalNumberOfPages>1</TotalNumberOfPages>
    <TotalNumberOfEntries>2</TotalNumberOfEntries>
</PaginationResult>
<HasMoreOrders>false</HasMoreOrders>
<OrderArray>
    <Order>
        <OrderID>221362908003-1324471823012</OrderID>
        <CheckoutStatus>
            <eBayPaymentStatus>NoPaymentFailure</eBayPaymentStatus>
            <LastModifiedTime>2014-02-03T12:08:51.000Z</LastModifiedTime>
            <PaymentMethod>PaisaPayEscrow</PaymentMethod>
            <Status>Complete</Status>
            <IntegratedMerchantCreditCardEnabled>false</IntegratedMerchantCreditCardEnabled>
        </CheckoutStatus>
    </Order>
    <Order> ...
    </Order>
    <Order> ...
    </Order>
</OrderArray>
</GetOrdersResponse>

我想解析XML的第六个子元素()我能够获得子元素的值按索引。例如,如果我想要一阶的OrderID,我可以使用 root [5] [0] [0] .text 。但是,我想按名称获取subElements的值。我尝试了以下代码,但未打印任何内容:

I want to parse the 6th child of the XML () I am able to get the value of subelements by index. E.g if I want OrderID of first order, i can use root[5][0][0].text. But, I would like to get the values of subElements by name. I tried the following code, but it does not print anything:

tree = ET.parse('response.xml')
root = tree.getroot()
for child in root:
    try:
        for ids in child.find('Order').find('OrderID'):
            print ids.text
    except:
        continue

有人可以帮忙吗我在他身上。谢谢

Could someone please help me on his. Thanks

推荐答案

由于XML文档具有名称空间声明( xmlns = urn:ebay:apis: eBLBaseComponents ),则在引用文档中的元素时必须使用通用名称。例如,您需要 {urn:ebay:apis:eBLBaseComponents} OrderID 而不只是 OrderID

Since the XML document has a namespace declaration (xmlns="urn:ebay:apis:eBLBaseComponents"), you have to use universal names when referring to elements in the document. For example, you need {urn:ebay:apis:eBLBaseComponents}OrderID instead of just OrderID.

此代码段打印文档中的所有OrderID:

This snippet prints all OrderIDs in the document:

from xml.etree import ElementTree as ET

NS = "urn:ebay:apis:eBLBaseComponents"

tree = ET.parse('response.xml')

for elem in tree.iter("*"):    # Use tree.getiterator("*") in Python 2.5 and 2.6
    if elem.tag == '{%s}OrderID' % NS:
        print elem.text

请参见 http://effbot.org/zone/element-namespaces.htm 了解有关ElementTree和名称空间的详细信息。

See http://effbot.org/zone/element-namespaces.htm for details about ElementTree and namespaces.

这篇关于元素树:如何解析子节点的子元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆