xml檔案名citylist.xml,資料内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<list>
<city>
<name>天津</name>
<code>tianjin</code>
</city>
<city>
<name>上海</name>
<code>shanghai</code>
</city>
</list>
</response>
#-*-coding:utf-8-*-
import MySQLdb
from xml.dom import minidom
doc = minidom.parse("citylist.xml")
root = doc.documentElement
citys = root.getElementsByTagName("city")
conn = MySQLdb.connect(host="local",user="local",passwd="local",db="bw_local", charset='utf8')
cursor = conn.cursor()
for city in citys:
#print city.toxml()
nameNode = city.getElementsByTagName("name")[0]
#print (nameNode.nodeName + ":" + nameNode.childNodes[0].nodeValue)
codeNode = city.getElementsByTagName("code")[0]
#print (codeNode.nodeName + ":" + codeNode.childNodes[0].nodeValue)
cursor.execute('insert into original(city,code) values(%s,%s);',(nameNode.childNodes[0].nodeValue,codeNode.childNodes[0].nodeValue))
conn.commit()
cursor.close()
conn.close()
print "success"
doc = minidom.parse("citylist.xml")表示将xml檔案中的資料全部加載到變量doc中。
root = doc.documentElement表示擷取xml的根結點
citys = root.getElementsByTagName("city")擷取要結點下面所有tag為city的資料,這裡的根結點是<response></response>,也就是說擷取整個檔案的city
可以通過for city in citys: print city.toxml()檢視一下city的資料結構。
<city>
<name>天津</name>
<code>tianjin</code>
</city>
city.getElementsByTagName("name")是擷取city下面所有tag為name的資料,是一個數組,因為每一個城市隻有一個name,是以可以使用nameNode = city.getElementsByTagName("name")[0]擷取到<name>天津</name>這樣的結點資料。nameNode.nodeName是擷取<name></name>中的name,nameNode.childNodes[0].nodeValue是擷取到<name>天津</name>中的“天津”。
結果:
nameNode.nodeName:nameNode.childNodes[0].nodeValue
name:上海
code:shanghai
name:北京
code:beijing
name:保定
code:baoding