【问题标题】:Python 2.5: ElementTree and UML in XMLPython 2.5:XML 中的 ElementTree 和 UML
【发布时间】:2013-07-09 08:44:55
【问题描述】:

我正在处理一个代表 UML 模型的 XML 文件。这是一个例子:

<?xml version="1.0" encoding="utf-8"?>
<XMI xmi.version="1.1" xmlns:UML="omg.org/UML13">
 <XMI.content>
  <UML:Model name="Model" xmi.id="_0">
   <UML:Namespace.ownedElement>
    <UML:Package name="Standard" xmi.id="_5">
     </UML:Package>
   </UML:Namespace.ownedElement>
   </UML:Model>
 </XMI.content>
</XMI>

这是一种 Rhapsody 导入格式。

我想在 Python 2.5 中使用 ElementTree 来修改这个 XML 文件。

我至少有一个问题,但我发现了 2 个后果,它们是:

使用这个简单的代码:

import xml.etree.ElementTree as ET
tree = ET.parse('source.xml')
root = tree.getroot()
tree.write('output.xml')

输出是:(我不想要任何改变)

<XMI xmi.version="1.1">
   <XMI.content>
      <ns0:Model name="FPLN_Model" xmi.id="_0" xmlns:ns0="omg.org/UML13">
         <ns0:Namespace.ownedElement>
            <ns0:Package name="Standard" xmi.id="_5">
            </ns0:Package>
         </ns0:Namespace.ownedElement>
      </ns0:Model>
   </XMI.content>
</XMI>

我搜索了这个问题,发现stackoverflow上有一个主题说要添加

ET.register_namespace("UML", "omg.org/UML13")

但出现错误:

AttributeError: 'module' object has no attribute 'register_namespace'

第二个后果是使用如下代码:

for Package_Node in Temp_Node.find('UML:Package'):

我收到错误:SyntaxError: expected path separator (:)

有什么想法可以帮助我吗?

谢谢!

【问题讨论】:

    标签: python elementtree python-2.5


    【解决方案1】:

    看到这个页面:http://effbot.org/zone/element-namespaces.htm

    元素树 1.3 (Python 2.7)

    ET.register_namespace(prefix, uri)

    元素树 1.2 (Python 2.5)

    ET._namespace_map[uri] = 前缀

    【讨论】:

      【解决方案2】:

      register_namespaceonly available since Python 2.7

      在 2.5 中可能有另一种方法可以使用 ElementTree 保留命名空间,但我不知道。

      或者,您可以尝试其他解析库。 lxml 保留命名空间,其 API 与 ElementTree 兼容。

      【讨论】:

      • 感谢您的回答。我终于找到了另一个解决方案,我正在实习的公司已经开发了修改 XML 文件的替代方案,所以我将使用它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-16
      • 2015-10-16
      • 1970-01-01
      • 2018-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多