python实例五:新建xml文件,建立图书库存

听说xml是一个非常好用的可可扩展格式,而且无论是是什么语言,基本都会或者都将支持xml数据格式。另外还有一个非常特色的功能,就是它能组建数据库,平常数据库更多的用MySQL数据库,其实通过xml也可以建立自己的数据库,xml同样拥有数据库一般的操作。

下面就来研究下python如何建立xml格式文件,以及如何写入数据等。我比较喜欢鲁迅的一些书籍,比如《呐喊》,《朝花夕拾》等,下面就以这两本书为例,详述python是如何操作xml的。

例子如下,某网店的这两本书的三个月的销售状况如下:

title(书名) writer(作者) price(价格) amount(库存) Sales_volume(销量)
呐喊 鲁迅 16 2566 3887
朝花夕拾 鲁迅 18 1851 3149

现在需要用python将图书的价格、库存、销量等以xml格式文本记录下来以便查询。为此,先要建立字段名,如:title用以标识书名,writer用以标识作者,price用以标识价格,amount标识库存,sales_volume标识销量。创建读取xml文件一般可以用SAX或者DOM,但由于SAX比较比较麻烦,不太方便,本次实例只用DOM中的minidom模块来对文件进行解析,并用到函数如:createElement()、createTextNode()、appendChild()等。实现代码如下所示:

from xml.dom.minidom import Document
doc=Document()#创建DOM文档对象
book=doc.createElement('book')#创建根元素
'''根元素创建后,开始增加第一本书籍'''
book.setAttribute('writer','鲁迅')#设置根元素属性
doc.appendChild(book)#增加book节点
title=doc.createElement('title')#创建title节点
title_text=doc.createTextNode('呐喊')#创建书名
book.appendChild(title)#增加title节点
title.appendChild(title_text)#增加书名
display=doc.createElement('display')#新建diplay节点
book.appendChild(display)
price=doc.createElement('price')#新建价格节点
price_text=doc.createTextNode('16')
amount=doc.createElement('amount')#新建库存节点
amount_text=doc.createTextNode('2566')
sales_volume=doc.createElement('sales_volume')
sales_volume_text=doc.createTextNode('3887')
display.appendChild(price)#增加价格节点
display.appendChild(amount)#增加库存节点
display.appendChild(sales_volume)#增加销售量节点
price.appendChild(price_text)
amount.appendChild(amount_text)
sales_volume.appendChild(sales_volume_text)
#**************以下为增加第二本数销售状况********
title=doc.createElement('title')
title_text=doc.createTextNode('朝花夕拾')
book.appendChild(title)
title.appendChild(title_text)
display=doc.createElement('display')
book.appendChild(display)
price=doc.createElement('price')
price_text=doc.createTextNode('18')
amount=doc.createElement('amount')
amount_text=doc.createTextNode('1851')
sales_volume=doc.createElement('sales_volume')
sales_volume_text=doc.createTextNode('3149')
display.appendChild(price)
display.appendChild(amount)
display.appendChild(sales_volume)
price.appendChild(price_text)
amount.appendChild(amount_text)
sales_volume.appendChild(sales_volume_text)
#数据创建完毕
'''open为打开book.xml文件,没有则新建'''
file=open('book.xml','w',encoding='UTF-8')
doc.writexml(file,indent='',newl='\n',addindent='\t',encoding='utf-8')
'''上述open()方法和writexml()方法中encoding需要一致,不一致可能会出错'''
file.close()#输入后要记得关闭数据文件

在上面的实例中用display来包含price、amount、sales_volume属性,这样更方便。上述代码运行结果如下:

当然上面数据重复的有很多,比如price.appendChild等出现重复,可以使用自定义函数加以精简。