2014年9月4日 星期四

(Python) How to read/modify element tag/value in xml file

目前小弟還是Python 新手! 所以有謬誤請各位大大再跟我說喔~

基本上,Python一開始就會先看系統中你安裝的版本,根據python官網提及可以知道在2.5版本之後是使用xml.etree.ElementTree,而在2.5版本之前會使用elementtree.ElementTree。

所以這部分可能大家要特別注意囉!!

首先~我這邊會先教大家要如何去讀取xml的內容跟資料,雖然官網上已經寫的非常清楚了!
我這邊會根據我自己做的實驗進行說明,格式當然會跟官網不同囉。



In Xml config file:
<root>
  <data>
    <subversionpath>subpath1</subversionpath>
    <folderpath>fpath1</folderpath>
  </data>
</root>


上述是我xml內容的資料。

那要如何讀取呢?

讀取的方式非常的簡單! 

Step 1: 建立tree

versiontree = ET.parse('your_xml_file_name.xml')
versionroot = versiontree.getroot()

Step 2: 透過tree讀取所需資料

透過此for的寫法,我們可以知道child可以讀取到versionroot中的所有第一層小孩,也就是data這個位置。

Input:
for child in versionroot:
    print "child: ", child
Output:
child: <Element 'data' at 0x7fd19bdaf490>
Step 3: 讀取data這個值

從Step 2可以得知,寫這個Input,可以讀到此child的addr.位置。
所以如果想知道第一層小孩的所有名稱,可以寫成:

Input:
for child in versionroot:
    print "child.tag: ", child.tag

Output:
child.tag: data

Step 4: 讀取特定child值
Input:
for label in versionroot.findall('./data'):

  print label.find('subversionpath').text

  print label.find('folderpath').text

Output:
  subpath1
  fpath1

那要如何修改值呢?


Step 1: 修改特定值
這邊要注意的是,我們要修改回此xml file下面寫這樣是不夠的! 因為這樣的修改只是修改儲存在記憶體中的值
所以必須要重新寫回xml中,有兩種方式,其中一種是較為簡單的如現在我介紹的這種
另外一種下次再做介紹吧!! Input:
  versionroot.find('./data/subversionpath').txt = subpath2
  print versionroot.find('./data/subversionpath').txt
  versionroot.find('./data/folderpath').txt = fpath2
  print versionroot.find('./data/folderpath').txt
Output:
  subpath2
  fpath2
Step 2: 寫回xml中
只要做這件事情,就可以把剛剛讀成tree的資料,再重新寫回xml中囉! Input:
  versiontree.write('your_xml_file_name.xml')

這樣是不是很簡單呢~~ 動手寫寫看吧~~

沒有留言:

張貼留言