Разбор вложенного xml с lxml и Python - PullRequest
1 голос
/ 08 марта 2012

У меня проблемы с анализом XML, когда он имеет вид:

<Cars>
    <Car>
        <Color>Blue</Color>
        <Make>Ford</Make>
        <Model>Mustant</Model>
    </Car>
    <Car>
        <Color>Red</Color>
        <Make>Chevy</Make>
        <Model>Camaro</Model>
    </Car>
</Cars>

Я понял, как анализировать детей 1-го уровня, как это:

<Car>
    <Color>Blue</Color>
    <Make>Chevy</Make>
    <Model>Camaro</Model>
</Car>

С таким кодом:

from lxml import etree
    a = os.path.join(localPath,file)
    element = etree.parse(a)
    cars = element.xpath('//Root/Foo/Bar/Car/node()[text()]')
    parsedCars = [{field.tag: field.text for field in cars} for action in cars]
    print parsedCars[0]['Make'] #Chevy

Как я могу разобрать несколько наших тегов "Car", которые являются дочерними тегами "Cars"?

1 Ответ

3 голосов
/ 08 марта 2012

Попробуйте это

from lxml import etree
    a = os.path.join(localPath,file)
    element = etree.parse(a)
    cars = element.xpath('//Root/Foo/Bar/Car')
    for car in cars:
        colors = car.xpath('./Color')
        makes = car.xpath('./Make')
        models = car.xpath('./Model')
...