Python - 元素树查找

时间:2016-10-26 00:41:02

标签: python xml

我有一个xml字符串,如下所示:

我正在使用元素树库

<?xml version="1.0" encoding="UTF-8"?>
<GetCategoriesResponse xmlns="urn:ebay:apis:eBLBaseComponents"><CategoryArray><Category><WantedParm1>true</WantedParm1><UnwantedParm1>true</UnwantedParm1><WantedParm2>20081</WantedParm2></Category></CategoryArray></GetCategoriesResponse>

我想得到一些类别节点的值,让我们称之为通缉Parms 1和2.但是我得到一个AttributeError可能是因为我写的代码无法找到Category项的子节点。

AttributeError:'NoneType'对象没有属性'text'。

import xml.etree.ElementTree as ET
XML = #Above Code in String
tree = ET.ElementTree(ET.fromstring(XML))
root = tree.getroot()
for Category in root[0]:
    one = Category.find("WantedParm1").text
    two = Category.find("WantedParm2").text
    print(one, two)

1 个答案:

答案 0 :(得分:4)

XML元素位于默认命名空间urn:ebay:apis:eBLBaseComponents中。因此所有标记都以命名空间的完整URI为前缀。

更改find()参数以包含URI应该有效。

import xml.etree.ElementTree as ET
XML = #Above Code in String
tree = ET.ElementTree(ET.fromstring(XML))
root = tree.getroot()
for Category in root[0]:
    one = Category.find("{urn:ebay:apis:eBLBaseComponents}WantedParm1").text
    two = Category.find("{urn:ebay:apis:eBLBaseComponents}WantedParm2").text
    print(one, two)

您可以在元素树docs here或此堆栈溢出post上找到有关处理命名空间的更多信息。