18

私は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">

xmlns:これらの属性をlxmlで設定するにはどうすればよいですか?明らかなことを試してみれば

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を単純なものにかなりの量使用しましたが、これまでのところ、名前空間について何も知る必要がないように管理しました。

4

2 に答える 2

26

これを可能にするElementTreeや他のシリアライザーとは異なり、lxml事前にこれらの名前名を設定する必要があります。

NSMAP = {"dc" : 'http://purl.org/dc/elements/1.1',
         "xlink" : 'http://www.w3.org/1999/xlink'}

root = Element("graph", nsmap = NSMAP)

(残りの宣言については、以下同様)

そして、適切な宣言を使用して名前名を使用できます。

n = SubElement(root, "{http://purl.org/dc/elements/1.1}foo")

もちろん、これは入力するのが面倒になるので、パスを短い定数名に割り当てることは一般的に有益です。

DCNS = "http://purl.org/dc/elements/1.1"

そしてNSMAP、宣言とSubElement宣言の両方でその変数を使用します。

n = SubElement(root, "{%s}foo" % (DCNS))
于 2011-10-09T11:21:42.087 に答える
6

ElementMakerの使用:

import lxml.etree as ET
import lxml.builder as builder
E = builder.ElementMaker(namespace='http://www.cs.rpi.edu/XGMML',
                         nsmap={None: 'http://www.cs.rpi.edu/XGMML',
                         'dc': 'http://purl.org/dc/elements/1.1/',
                         'xlink': 'http://www.w3.org/1999/xlink',
                         'rdf': 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
                         'cy': 'http://www.cytoscape.org', })
graph = E.graph(label="Test", directed="1")
print(ET.tostring(graph, pretty_print=True))

収量

<graph xmlns:cy="http://www.cytoscape.org" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.cs.rpi.edu/XGMML" directed="1" label="Test"/>
于 2011-10-09T11:37:21.270 に答える