2013-07-09 27 views
1

我正在处理一个代表UML模型的XML文件。下面是它的一个例子:Python 2.5:XML中的ElementTree和UML

<?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> 

我搜索关于这个问题,我发现在计算器一个主题,说要加

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 (:)

有别人的想法帮我?

谢谢!

回答

0

register_namespaceonly available since Python 2.7

有可能是另一种方式与2.5至ElementTree的保留命名空间,但我没有意识到这一点。

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

+0

谢谢你的回答。我终于找到了另一个解决方案,我在这里实习的公司已经开发出了替代修改XML文件的工具,因此我将使用它。 – Teodoro