Dom解析xml文件
XML指可扩展标记语言
XML的设计宗旨是传输存储数据
XML文档树结构
XML文档形成了一种树结构,它从“根部”开始,然后扩展到枝叶
利用dom规范,能够实现dom 文档和xml之间的相互转换,遍历、操作相应dom文档的内容
DOM规范的核心就是树模型
DOM解析xml的步骤:
1.// 获得解析器工厂对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
2. // 通过解析器工厂对象新建一个文档解析器
DocumentBuilder builder = factory.newDocumentBuilder();
3.// 通过解析器解析xml文件,在内存中形成文档树(节点树)
// dom 适合于解析 xml 文件小,简单
Document doc = builder.parse(fileName);
4.// 根据标签名获得所有的 book 节点
NodeList nodeList = doc.getElementsByTagName(“book”);解析过程:
5.遍历节点集合 获取每个节点元素
for (int i = 0; i < nodeList.getLength(); i++) {
Element element = (Element) nodeList.item(i);
获取节点的属性 element.getAttribute(属性名)
6.获取子节点的值
属性名称 = doc.getElementsByTagName(“title”).item(i).getFirstChild().getNodeValue();
-
举个栗子 导包要注意 导org.w3c.dom.
解析bookstore 的XML
<Book>
<book id="1001">
<bookname >红楼梦</bookname>
<bookauther>曹雪芹</bookauther>
<bookprice>34.6</bookprice>
<bookdata>1912-11-5</bookdata>
</book>
<book id="1002">
<bookname >朝花夕拾</bookname>
<bookauther>54</bookauther>
<bookprice>44.8</bookprice>
<bookdata>1954-10-5</bookdata>
</book>
</Book>
//造工厂
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//利用工厂造解析器
DocumentBuilder db = dbf.newDocumentBuilder();
//利用解析器将xml转换为Document对象
//导包 org.w3c.dom.
Document doc = db.parse(new File("2021Hunan/src/Day0102/bookstore.xml"));
//利用Doc获得所有的Node节点,Nodelist
NodeList list = doc.getElementsByTagName("book");
for (int i = 0; i < list.getLength(); i++) {
Element ele= (Element) list.item(i);
int id=Integer.parseInt(ele.getAttribute("id"));
String bookname=doc.getElementsByTagName("bookname").item(i).getFirstChild().getNodeValue();
String bookauther=doc.getElementsByTagName("bookauther").item(i).getFirstChild().getNodeValue();
double bookprice= Double.parseDouble(doc.getElementsByTagName("bookprice").item(i).getFirstChild().getNodeValue());
Date date =new SimpleDateFormat("yyyy-MM-dd").parse(doc.getElementsByTagName("bookdata").item(i).getFirstChild().getNodeValue());
// Book book=new Book(id,bookname,bookauther,bookprice,date);
// System.out.println(book);
dom解析的优点:十分的便于进行增删改查的操作,只要解析一次拿到dom对象后可以重复的使用减少解析次数
缺点:解析比较慢,需要将整个文档都加载到内存解析完成后才能进行操作,非常耗内存