1

我正在使用代表 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 (:)

有人有想法可以帮助我吗?

谢谢!

4

2 回答 2

1

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

元素树 1.3 (Python 2.7)

ET.register_namespace(前缀,uri)

元素树 1.2 (Python 2.5)

ET._namespace_map[uri] = 前缀

于 2015-07-09T06:05:57.940 回答
0

register_namespace仅从Python 2.7 开始可用

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

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

于 2013-07-09T08:54:26.537 回答