解析此xml文件的错误在哪里

时间:2015-07-28 00:04:56

标签: python xml python-2.7

这是我的xml文件:

<Attributes>
    <Attribute>
        <name>action</name>
    </Attribute>
    <Attribute>
        <name>country</name>
    </Attribute>
    <Attribute>
        <name>city</name>
    </Attribute>
    <Attribute>
        <name>location</name>
    </Attribute>
    <Attribute>
        <name>ad_title</name>
    </Attribute>
    <Attribute>
        <name>posting_date</name>
    </Attribute>
    <Attribute>
        <name>bedrooms</name>
    </Attribute>
    <Attribute>
        <name>bathrooms</name>
    </Attribute>
    <Attribute>
        <name>type</name>
    </Attribute>
    <Attribute>
        <name>size</name>
    </Attribute>
    <Attribute>
        <name>property_referene</name>
    </Attribute>
    <Attribute>
        <name>price</name>
    </Attribute>
    <Attribute>
        <name>price_sqft</name>
    </Attribute>
    <Attribute>
        <name>building</name>
    </Attribute>
    <Attribute>
        <name>amenities</name>
    </Attribute>
    <Attribute>
        <name>description</name>
    </Attribute>
    <Attribute>
        <name>trade_name</name>
    </Attribute>
    <Attribute>
        <name>ded_licence_number</name>
    </Attribute>
    <Attribute>
        <name>rera_registration_number</name>
    </Attribute>
    <Attribute>
        <name>phone</name>
    </Attribute>
    <Attribute>
        <name>ad_images</name>
    </Attribute>
    <Attribute>
        <name>payment_type</name>
    </Attribute>
    <Attribute>
        <name>furnished</name>
    </Attribute>

</Attributes>

我有这个班级

from lxml import etree
from pprint import pprint
class defaultAttributeParser():
    def __init__(self, defaultAttributeFile):
        self.doc=etree.parse(defaultAttributeFile)

    def getDefaultAttributes(self):
        attributesDict = list()
        attributes = self.doc.findall('Attributes/Attribute')
        print(attributes)
        for attribute in attributes:
            print("asfasfd")
            attributesDict.append(attribute.find('name').text)
        return attributesDict

a = defaultAttributeParser('Apartments.xml')
pprint(len(a.getDefaultAttributes()))

我一直认为getDefaultAttributes的数量是零,即使如你所见,属性太多,我做错了什么?

1 个答案:

答案 0 :(得分:3)

使用您的示例文档:

>>> import lxml.etree
>>> et = lxml.etree.parse('test.xml')
>>> et.xpath('Attributes')
[]
>>> et.xpath('/Attributes')
[<Element Attributes at 0x10a55c7a0>]

......而且,答案是:你需要锚定你的疑问。

>>> et.xpath('/Attributes/Attribute')

...返回所有Attribute元素。