元素树:如何解析子节点的子元素 [英] Element Tree: How to parse subElements of child nodes
问题描述
我有一个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屋!