我有一个旨在访问在线API(Google Search Appliance)的脚本,需要发布特定的xml格式。我使用lxml构建了一个xml文档,但我的问题是,在尝试创建根节点时,我得到了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命名空间时,我没有得到例外。
答案 0 :(得分:2)
解析器永远不会查找命名空间的URI,如果您不在代理之后也无关紧要。但是lxml 2.3中的解析器会检查它们是否是有效的URI。所以它应该是
nsmap = {None: default_ns, "gsa": gsa_ns}