2013-07-29 37 views
2

我需要將xml文件中名爲approved-by的屬性的值從'no'更改爲'yes'。這裏是我的xml文件:使用ElementTree在XML文件中設置屬性值

<?xml version="1.0" encoding="UTF-8" ?> 
<!--Arbortext, Inc., 1988-2008, v.4002--> 
<!DOCTYPE doc PUBLIC "-//MYCOMPANY//DTD XSEIF 1/FAD 110 05 R5//EN" 
    "XSEIF_R5.dtd"> 
<doc version="XSEIF R5" xmlns="urn:x-mycompany:r2:reg-doc:1551-fad.110.05:en:*"> 
    <meta-data> 
     <?Pub Dtl?> 
      <confidentiality class="mycompany-internal" /> 
      <doc-name>INSTRUCTIONS</doc-name> 
      <doc-id> 
       <doc-no type="registration">1/1531-CRA 119 1364/2</doc-no> 
       <language code="en" /> 
       <rev>PA1</rev> 
       <date> 
        <y>2013</y> 
        <m>03</m> 
        <d>12</d> 
       </date> 
      </doc-id> 
      <company-id> 
       <business-unit></business-unit> 
       <company-name></company-name> 
       <company-symbol logotype="X"></company-symbol> 
      </company-id> 
      <title>SIM Software Installation Guide</title> 
      <drafted-by> 
       <person> 
        <name>Shahul Hameed</name> 
        <signature>epeeham</signature> 
       </person> 
      </drafted-by> 
      <approved-by approved="no"> 
       <person> 
        <name>AB</name> 
        <signature>errrrrn</signature> 
      </approved-by> 

我嘗試了兩種方式,並在兩個失敗。我的第一種方法是

import xml.etree.ElementTree as ET 
from xml.etree.ElementTree import Element 

root = ET.parse('Path/1_1531-CRA 119 1364_2.xml') 
sh = root.find('approved-by') 
sh.set('approved', 'yes') 
print etree.tostring(root) 

這樣,我收到一條錯誤消息,說AttributeError: 'NoneType' object has no attribute 'set'

所以我嘗試了另一種方式。

import xml.etree.ElementTree as ET 
from xml.etree.ElementTree import Element 

root = ET.parse('C:/Path/1_1531-CRA 119 1364_2.xml') 
elem = Element("approved-by") 
elem.attrib["approved"] = "yes" 

我沒有得到任何錯誤,也沒有設置屬性。我很困惑,而且無法找到這個腳本有什麼問題。

回答

3

既然你提供的XML是無效的,這裏有一個例子:

import xml.etree.ElementTree as ET 


xml = """<?xml version="1.0" encoding="UTF-8"?> 
<body> 
    <approved-by approved="no"> 
     <name>AB</name> 
     <signature>errrrrn</signature> 
    </approved-by> 
</body> 
""" 

tree = ET.fromstring(xml) 
sh = tree.find('approved-by') 
sh.set('approved', 'yes') 

print ET.tostring(tree) 

打印:

<body> 
    <approved-by approved="yes"> 
     <name>AB</name> 
     <signature>errrrrn</signature> 
    </approved-by> 
</body> 

所以,第一種方式你試過的作品。希望有所幫助。

+0

:確實是這樣的。但是,如果我嘗試解析一個XML文件,它會引發一個錯誤。該文件包含樣式表,是否是tat ?.你說文件無效,這是什麼意思? –