2016-03-13 106 views
2

我想使用xml.etree爲TMX格式製作一個簡單的xml轉換器。如何創建如下所示的語言屬性:xml:lang使用xml.etree,如何創建名稱空間屬性「XML:lang」?

我的嘗試:

root = et.Element("tmx") 
    body = et.SubElement(root, "body") 
    tu = et.SubElement(body, "tu") 
    tuv_en = et.SubElement(tu, "tuv", xml:lang="en") # 'xml:lang' gets error 
    tuv_zh = et.SubElement(tu, "tuv", xml:lang="zh") 
    seg_en = et.SubElement(tuv_en, "segment").text="en text." 
    seg_zh = et.SubElement(tuv_zh, "segment").text="zh text." 
    tree = et.ElementTree(root) 
    tree.write(file + ".xml") 

我想要什麼:

<tmx> 
    <body> 
    <tu> 
     <tuv xml:lang="en"> 
     <seg>en text.</seg> 
     </tuv> 
     <tuv xml:lang="zh"> 
     <seg>zh text.</seg> 
     </tuv> 
    </tu> 
    </body> 
</tmx> 
+0

您是否嘗試過'et.register_namespace'? –

回答

3

設置attrib關鍵字參數:

import xml.etree.ElementTree as et 

root = et.Element("tmx") 
body = et.SubElement(root, "body") 

tu = et.SubElement(body, "tu") 
et.SubElement(tu, "tuv", attrib={"xml:lang": "en"}) 
et.SubElement(tu, "tuv", attrib={"xml:lang": "zh"}) 

print(et.tostring(body)) 

這將產生:

<body><tu><tuv xml:lang="en" /><tuv xml:lang="zh" /></tu></body> 
1

如果你有一個現有的LXML etree DOM和不能使用ElementTree中,你可以這樣設置屬性:

from lxml import etree 

element = etree.Element("element") 

# This won't work: element.set("xml:lang", "en") 
element.set("{http://www.w3.org/XML/1998/namespace}lang", "en") 

print(etree.tostring(element)) 

結果:

<element xml:lang="en"/> 
+0

哇,很棒!它也適用於ElementMaker。 – mnv

相關問題