试图迭代XML:无法获得子节点的值

时间:2016-10-11 11:38:24

标签: python xml-parsing lxml elementtree

我需要处理一个包含许多节点的巨大文件,例如

<category name="28931778o.rjpf">
<name>RequestedName</name>
<root>0</root>
<online>1</online>
<description xml:lang="pt-PT">mydescription </description>
<category-links/>
<template/>
<parent name="PTW-0092"/>
<custom-attributes>
<custom-attribute name="sortkey" dt:dt="string">RequestedValue</custom-attribute>
<custom-attribute name="ShortLink" dt:dt="string" xml:lang="pt-PT">/Requested_Url.html</custom-attribute>
<custom-attribute name="ShortLinkActivate" dt:dt="string" xml:lang="pt-PT">true</custom-attribute>
...
</category>

我需要为每个类别获取3个请求的值。 我使用Python .27和etree。 在跑步时

for elem in tree.iterfind('{http://www.cc.com/a}category'):
    requestedName = elem.find('{http://www.cc.com/a}name').text
    print requestedName

工作正常

运行时

for elem in tree.iterfind('{http://www.cc.com/a}category/{http://www.cc.com/a}custom-attributes/{http://www.cc.com/a}custom-attribute[@name="sortkey"]'):
    print elem.text

它也可以正常工作 当我想要检索所有三个值时出现问题。我试着找到一个&#34;类别&#34;节点并在其中找到2个请求的值

for elem in tree.iterfind('{http://www.cc.com/a}category'):
    requestedName = elem.find('{http://www.cc.com/a}name').text
    print requestedName
    Requestedsortkey = elem.find('./{http://www.cc.com/a}custom-attributes/{http://www.cc.com/a}custom-attribute[@name="sortkey"]')
    print Requestedsortkey.text
    RequestedUrl = elem.find('./{http://www.cc.com/a}custom-attributes/{http://www.cc.com/a}custom-attribute[@name="ShortLink"]')
    print RequestedUrl.text

程序因错误消息而崩溃 AttributeError:&#39; NoneType&#39;对象没有属性&#39; text&#39;

谁可以提供帮助?

1 个答案:

答案 0 :(得分:0)

你是对的Dopstar!非常感谢

for elem in tree.iterfind('{http://www.cc.com/a}category'):
    requestedName = elem.find('{http://www.cc.com/a}name').text
   print requestedName
   Requestedsortkey = elem.find('{http://www.cc.com/a}custom-attributes/{http://www.cc.com/a}custom-attribute[@name="sortkey"]')
    if Requestedsortkey <> None:
       print Requestedsortkey.text
    RequestedUrl = elem.find('{http://www.cc.com/a}custom-attributes/{http://www.cc.com/a}custom-attribute[@name="ShortLink"]')
    if RequestedUrl <> None : 
       print RequestedUrl.text