2011-12-08 5 views
4

lxml.etree를 사용하여 JSON 객체에서 xml 트리를 만들려고합니다. 같은 그들 콜론 CONTIN tagnames의 일부 무엇인가 : -":"이있는 lxml 태그 이름

'설정 : 현재'나는 태그 이름으로 '{설정} 현재'를

를 사용하여 시도하지만이 얻을 : -

NS0을 : 현재 xmlns : ns0 = "settings"

+1

은 배울 시간을 가져봐 XML 네임 스페이스의 기초. 그런 다음 http://lxml.de/tutorial.html#namespaces를 읽으십시오. – mzjn

답변

6

예, 먼저 XML 네임 스페이스를 읽고 이해합니다. U

>>> MY_NAMESPACES={'settings': 'http://example.com/url-for-settings-namespace'} 
>>> e=etree.Element('{%s}current' % MY_NAMESPACES['settings'], nsmap=MY_NAMESPACES) 
>>> etree.tostring(e) 
'<settings:current xmlns:settings="http://example.com/url-for-settings-namespace"/>' 

을 그리고 당신은 당신이 당신의 XML 트리에 nsmap=MY_NAMESPACES와 요소를 가지고해야한다는 기본 네임 스페이스

>>> MY_NAMESPACES={'settings': 'http://example.com/url-for-settings-namespace', None: 'http://example.com/url-for-default-namespace'} 
>>> r=etree.Element('my-root', nsmap=MY_NAMESPACES) 
>>> d=etree.Element('{%s}some-element' % MY_NAMESPACES[None]) 
>>> e=etree.Element('{%s}current' % MY_NAMESPACES['settings']) 
>>> d.append(e) 
>>> r.append(d) 
>>> etree.tostring(r) 
'<my-root xmlns:settings="http://example.com/url-for-settings-namespace" xmlns="http://example.com/url-for-default-namespace"><some-element><settings:current/></some-element></my-root>' 

참고가 결합 할 수 있습니다 : 다음 네임 스페이스와 XML 트리를 생성하는 것을 사용 계층. 그런 다음 모든 하위 노드가 해당 선언을 사용할 수 있습니다. 당신이 태그 이름의 새로운 노드를 사용 네임 스페이스 URI를 만들 때 LXML는 또한 ns0

같은 네임 스페이스 이름을 생성 귀하의 경우에는, 아니 그 비트가없는, 네임 스페이스없는 이름 : {http://example.com/url-for-settings-namespace}current