【问题标题】:With xml.etree, How to I create namespaced attribute "XML:lang"?使用 xml.etree,如何创建命名空间属性“XML:lang”?
【发布时间】:2016-03-13 11:31:25
【问题描述】:

我正在尝试使用 xml.etree 为 TMX 格式制作一个简单的 xml 转换器。如何创建如下所示的语言属性: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>

【问题讨论】:

  • 你试过et.register_namespace吗?

标签: python xml xml.etree


【解决方案1】:

设置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>

【讨论】:

    【解决方案2】:

    如果你有一个现有的 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"/>
    

    【讨论】:

      猜你喜欢
      • 2020-09-20
      • 1970-01-01
      • 2013-06-09
      • 1970-01-01
      • 2019-12-26
      • 2023-03-14
      • 2011-01-15
      • 1970-01-01
      • 2011-03-17
      相关资源
      最近更新 更多