Неверное имя тега для lxml - PullRequest
1 голос
/ 02 ноября 2011

Я использую lxml для анализа xml, который я получил от API рекламы продуктов Amazon. Дерево анализируется как:

root=etree.XML(self.sendRequest(parameters))

Когда я использую root.tag или root.child.tag, я всегда получаю что-то вроде:

{http://webservices.amazon.com/AWSECommerceService/2005-10-05}RequestProcessingTime

Ссылка появляется в имени тега, фактически является атрибутом корневого элемента:

<ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2005-10-05">

Однако, похоже, он не был правильно проанализирован. Есть ли способ удалить раздражающий {...} из тегов?

1 Ответ

0 голосов
/ 02 ноября 2011

Часть между фигурными скобками - это пространство имен XML, которое читается из атрибута xmlns элемента. Вы не можете избавиться от этого, потому что именно так определяется API дерева элементов, на котором основан lxml: все имена тегов имеют префикс с пространством имен в фигурных скобках.

Некоторое понятие пространства имен является обязательным для синтаксического анализатора XML с хорошим поведением для устранения неоднозначностей, которые возникают из-за того, что одно и то же имя тега может появляться в разных пространствах имен с разными значениями, а один документ может содержать теги из нескольких пространств имен.

Ваш документ анализируется правильно, вам просто нужно учитывать пространство имен в вашей программе. Вот и все.

...