У меня проблема с анализом XML-объекта с помощью find.lxml найти элемент по атрибуту text в xml с помощью переменной в выражении find
Я прочитал мои объекты XML из ответа HTTP с были ответом является HTML тела, которое я получаю от моей HTTP рутины:
xml_obj = objectify.XML(response)
Это мой XML Объект:
print etree.tostring(xml_obj, pretty_print=True)
<kids>
<kid>
<id>110</id>
<name>Peter</name>
</kid>
<kid>
<id>111</id>
<name>Paul</name>
</kid>
<kid>
<id>112</id>
<name>Mary</name>
</kid>
<kid>
<id>113</id>
<name>Jane</name>
</kid>
</kids>
Это мой код для поиска ребенка по имени:
kid_obj = xml_obj.find(‘.//kid/name[text()=“Jane”]’).getparent()
print etree.tostring(kid_obj, pretty_print=True)
<kid>
<id>113</id>
<name>Jane</name>
</kid>
Как только я заменю строку на переменную, она не работа:
kidname = “Jane”
kid_obj = xml_obj.find(‘.//kid/name[text()=kidname]').getparent()
print etree.tostring(kid_obj, pretty_print=True)
AttributeError: 'NoneType' object has no attribute 'getparent'
Это не работает либо:
kidname = “Jane”
kid_obj = xml_obj.find('.//step/name[text()={0}]’.format(kidname)).getparent()
print etree.tostring(kid_obj, pretty_print=True)
AttributeError: 'NoneType' object has no attribute 'getparent'
После того как я спал над ним в течение ночи я, наконец, нашел рабочее решение, но, возможно, не самый изящный код:
kidname = 'Jane'
kid_obj = xml_obj.find('.//kid/name[text()="'+kidname+'"]').getparent()
print etree.tostring(kid_obj, pretty_print=True)
<kid>
<id>113</id>
<name>Jane</name>
</kid>
Возможный дубликат http://stackoverflow.com/q/41985178/407651 – mzjn