xml:(在框架 常用在配置文件)
1、标签成对出现
2、区分大小写
3、标签要正确嵌套
4、开始部分<?xml version="1.0" encoding="utf-8"?>
5、只能有一个根节点
6、节点可以有属性
DTD(Document Type Definition):约束XMl文件的节点
<!DOCTYPE library [
<!ELEMENT library (book+)>
<!ELEMENt book (name,price,author)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT price(#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ATTLIST book id CDATA #REQUIRED> (#REQUIRED'必须的' 、#IMPLIED'不是必须的'、#FIXED'属性值是固定的')
]>
<library>
<book id="1">
<name>呵呵</name>
<price>10rmb</price>
<author>哈哈王</author>
</book>
<book id="2">
<name>嘿嘿</name>
<price>20rmb</price>
<author>还是哈哈王</author>
</book>
</library>
特点:容易阅读 通用性强
XML解析
1、dom(文档对象模型):把解析的xml整个加载到内存,组织成object树。
w3cDom dom4j
2、sax:事件驱动式解析,不会再内存中加载整个文档,只会根据自己编写的事件保存数据。
dom解析案例
from xml.dom.minidom import parse
class Book(object):
def __init__(self,name=None,price=None,author=None):
self.name=name
self.price=price
self.author=author
def __str__(self):
return self.name+'\t'+self.price+'\t'+self.author
library=[]
doc=parse("library.xml")
print(doc)
#得到跟节点
root=doc.documentElement
print(root)
book=root.getElementsByTagName("book")
for b in book:
name=b.getElementsByTagName("name")[0].childNodes[0].data
price=b.getElementsByTagName("price")[0].childNodes[0].data
author=b.getElementsByTagName("author")[0].childNodes[0].data
print(name,price,author)
library.append(Book(name,price,author))
print("书名:\t价格:\t作者:")
for i in library:
print(i)