Неверный URI пространства имен с использованием Python lxml - PullRequest
1 голос
/ 03 ноября 2011

У меня есть сценарии, предназначенные для доступа к онлайн-API (Google Search Appliance), для которого требуется опубликовать определенный формат xml.Я создал документ xml, используя lxml, но моя проблема в том, что при попытке создать корневой узел я получил исключение ValueError: Invalid namespace URI.Вот полный пример:

gsa_ns="http://schemas.google.com/gsa/2007"
default_ns="http://www.w3.org/2005/Atom"

gsa="{%s}"%gsa_ns
default="{%s}"%default_ns

nsmap={None:default, "gsa":gsa}

entry=et.Element(default+"entry",nsmap=nsmap)

И ниже выдается исключение:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "lxml.etree.pyx", line 2557, in lxml.etree.Element (src/lxml/lxml.etree.c:50983)
  File "apihelpers.pxi", line 156, in lxml.etree._makeElement (src/lxml/lxml.etree.c:12231)
  File "apihelpers.pxi", line 143, in lxml.etree._makeElement (src/lxml/lxml.etree.c:12097)
  File "apihelpers.pxi", line 257, in lxml.etree._initNodeNamespaces (src/lxml/lxml.etree.c:13125)
  File "apihelpers.pxi", line 1567, in lxml.etree._uriValidOrRaise (src/lxml/lxml.etree.c:24339)
ValueError: Invalid namespace URI u'{http://schemas.googls.com/gsa/2007}'

Может кто-нибудь объяснить, что это значит?Я нахожусь за http-прокси, но не думаю, что это проблема, так как, когда я удаляю пространство имен GSA и сохраняю только пространство имен w3.org, я не получаю исключения.

1 Ответ

2 голосов
/ 03 ноября 2011

URI пространств имен никогда не просматривается парсером, не имеет значения, находитесь ли вы за прокси или нет. Но анализатор в lxml 2.3 проверяет, являются ли они действительными URI. Так и должно быть

nsmap = {None: default_ns, "gsa": gsa_ns}
...