2011-10-09 32 views
10

私はいくつかのXML(特にXGMML)の作成と書き出しにlxml(2.2.8)を使用しています。それを読んされますappは明らかにかなりfussyであるとしてトップレベルの要素を見たい:LXMLで名前空間の要素属性を書き込む方法は?

<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の、これまでのところ、名前空間について何も知る必要を避けることができました。 ElementTreeのか、事前にこれらの名前空間を設定するためにあなたを必要としlxmlこの、できるようになる他のシリアライザとは異なり

答えて

18

:(宣言の残りのためなどなど)

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

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

そして、そして、あなたはそれらの適切な宣言を使用して名前空間を使用することができます。これは、入力する迷惑なるので、それは一般的にbeneficiaあるもちろん

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

次いで

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

そしてNSMAPSubElement宣言の両方でその変数を使用する:

n = SubElement(root, "{%s}foo" % (DCNS)) 
4

ElementMakerを使用する:短い定数名にパスを割り当てるL

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"/> 
関連する問題