3 votes

LXML : KeyError : '@' - element.find('./@attrname')

Je ne sais pas comment mais element.find('./@attrname') soulève KeyError: '@'

code

    import lxml.etree as ET
    with open(self.filepaths[0]) as f:
        root = ET.parse(f)
        root = root.getroot()

        namespaces = {'xmlns': 'http://www.iai-shop.com/developers/iof/extensions.phtml',
                      "xml": "http://www.w3.org/XML/1998/namespace"}
        items = root.findall('.//product', namespaces)

        for item in items:
            name = item.find('./description/short_desc[@xml:lang="pol"]', namespaces).text

            try:
                desc = item.find('./description/long_desc[@lang="pol"]', namespaces).text
            except AttributeError:
                desc = None

            code = item.find('./@code_on_card',namespaces)

J'essaie d'obtenir code_on_card de l'attribut <product type="xxx" id="xxx" vat="23.0" code_on_card="xxx">

Savez-vous où est le problème ?

3voto

Milano Slesarik Points 4005

La réponse est simple - j'ai utilisé .find au lieu de .xpath .

EDIT :

Ensuite, vous devez obtenir le texte en utilisant xpath : element.xpath('.//element/text())[0]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X