如何使用 LXML 编写命名空间元素属性?
我正在使用 lxml (2.2.8) 创建和写出一些 XML(特别是 XGMML)。将读取它的应用程序显然相当挑剔 并希望查看顶级元素:
<graph label="Test" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xlink="h
ttp://www.w3.org/1999/xlink" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-
ns#" xmlns:cy="http://www.cytoscape.org" xmlns="http://www.cs.rpi.edu/XGMML" di
rected="1">
如何使用 lxml 设置这些 xmlns:
属性?如果我尝试明显的
root.attrib['xmlns:dc']='http://purl.org/dc/elements/1.1/'
root.attrib['xmlns:xlink']='http://www.w3.org/1999/xlink'
root.attrib['xmlns:rdf']='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
root.attrib['xmlns:cy']='http://www.cytoscape.org'
root.attrib['xmlns']='http://www.cs.rpi.edu/XGMML'
lxml 抛出 ValueError: Invalid attribute name u'xmlns:dc'
我过去曾大量使用 XML 和 lxml 来完成简单的事情,但设法避免需要知道到目前为止有关命名空间的任何内容。
I'm using lxml (2.2.8) to create and write out some XML (specifically XGMML). The app which will be reading it is apparently fairly fussy and wants to see a top level element with:
<graph label="Test" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xlink="h
ttp://www.w3.org/1999/xlink" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-
ns#" xmlns:cy="http://www.cytoscape.org" xmlns="http://www.cs.rpi.edu/XGMML" di
rected="1">
How do I setup those xmlns:
attributes with lxml ? If I try the obvious
root.attrib['xmlns:dc']='http://purl.org/dc/elements/1.1/'
root.attrib['xmlns:xlink']='http://www.w3.org/1999/xlink'
root.attrib['xmlns:rdf']='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
root.attrib['xmlns:cy']='http://www.cytoscape.org'
root.attrib['xmlns']='http://www.cs.rpi.edu/XGMML'
lxml throws a ValueError: Invalid attribute name u'xmlns:dc'
I've used XML and lxml a fair amount in the past for simple stuff, but managed to avoid needing to know anything about namespaces so far.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
与 ElementTree 或其他允许这样做的序列化程序不同,
lxml
需要您事先设置这些命名空间:(对于其余声明,依此类推)
然后您可以使用这些命名空间正确的声明:
当然,这对于输入来说很烦人,因此将路径分配给短常量名称通常是有益的:
然后在
NSMAP
和SubElement
中使用该变量> 声明:Unlike ElementTree or other serializers that would allow this,
lxml
needs you to set up these namespaces beforehand:(and so on and so forth for the rest of the declarations)
And then you can use the namespaces using their proper declarations:
Of course this gets annoying to type, so it is generally beneficial to assign the paths to short constant names:
And then use that variable in both the
NSMAP
and theSubElement
declarations:使用 ElementMaker:
产量
Using ElementMaker:
yields