2013-07-09 26 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