网络小曦
2015-09-15 21:03
有把老师最后的那个联系做了的吗?
在3-4 中你会看到用SAX将XML文件存储在Book类中......那个比较容易理解
前提是我们不知道xml中的那些内容啊,要是所有属性都知道了,那叫我们解析xml文件的内容就没有意义了
//勉强写出来了,大家凑合看
package com.lianxi.baochushujujiegou;
import java.io.IOException;
import java.io.ObjectInputStream.GetField;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class TextDOMXMLDemo {
public static void main(String[] args) {
book book1 = new book();
book book2 = new book();
//从 XML 文档获取生成 DOM 对象树的解析器
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();//newInstance()是一个静态方法,所以可以不创建对象就可以直接只用
try {
//使用当前配置的参数创建一个新的 DocumentBuilder 实例。
DocumentBuilder db = dbf.newDocumentBuilder();
/*
* DocumentBuilder的定义:定义 API, 使其从 XML 文档获取 DOM 文档实例。使用此类,
* 应用程序员可以从 XML 获取一个 Document。
此类的实例可以从 DocumentBuilderFactory.newDocumentBuilder() 方法获取。
获取此类的实例之后,将可以从各种输入源解析 XML。
这些输入源有 InputStreams、Files、URL 和 SAX InputSources。
* */
try {
//创建i,j,k,作为循环的变量,为了后边方便保存到book的对象中
int i = 0;
int j = 0;
int k = 0;
int flag = 0;//判断正在读第几本书
//创建一个XML文件的根(Document 接口表示整个 HTML 或 XML 文档。从概念上讲,它是文档树的根,并提供对文档数据的基本访问。)
Document docunment = db.parse("D:\\javaWorkHome\\XML(UTF-8)\\src\\books.xml");
//获得标签名为book的节点的集合,并打印
NodeList bookList = docunment.getElementsByTagName("book");
System.out.println("获取到了"+bookList.getLength()+"本书");
//遍历节点,开始访问节点内的元素
for(i=0; i<bookList.getLength(); i++,flag++) {
System.out.println("下面开始遍历第"+ (i+1) + "本书");
System.out.println("============遍历开始============");
//获取名为book的单个节点
Node book = bookList.item(i);
//获取该节点的所有属性图 属性指的是标签<>中的内容,是对标签的说明解释
NamedNodeMap attrs = book.getAttributes();
//遍历book的属性
System.out.println("第"+(i+1)+"本书共有"+ attrs.getLength()+ "属性");
for(j=0; j<attrs.getLength(); j++) {
//获取book节点上的某一个属性
Node attr = attrs.item(j);
//输出属性名和属性值
System.out.print("属性名为"+ attr.getNodeName());
System.out.println(",属性值为"+ attr.getNodeValue());
}
//解析book节点的子节点
NodeList childNodes = book.getChildNodes();
System.out.println("第"+(i+1)+"本书共有"+childNodes.getLength()
+"个子节点");//子节点包括<>标签和标签之间的空白和换行
for(k=0; k<childNodes.getLength(); k++) {
//区分出text类型的node以及element类型node
if(childNodes.item(k).getNodeType() == Node.ELEMENT_NODE) {
System.out.print("第"+k+"个元素,"+childNodes.item(k).getNodeName()+":");
System.out.println(childNodes.item(k).getFirstChild().getNodeValue());
}
}
System.out.println("============遍历结束============");
//将从XML中读取的文件放在对象中
switch (flag) {
case 0:
book1.setName(childNodes.item(1).getFirstChild().getNodeValue());
book1.setAuthor(childNodes.item(3).getFirstChild().getNodeValue());
book1.setYear(Integer.parseInt(childNodes.item(5).getFirstChild().getNodeValue()) );
book1.setPrice(Double.parseDouble(childNodes.item(7).getFirstChild().getNodeValue()));
break;
case 1:
book2.setName(childNodes.item(1).getFirstChild().getNodeValue());
book2.setLanguage(childNodes.item(7).getFirstChild().getNodeValue());
book2.setYear(Integer.parseInt(childNodes.item(3).getFirstChild().getNodeValue()) );
book2.setPrice(Double.parseDouble(childNodes.item(5).getFirstChild().getNodeValue()));
break;
}
}
} catch (SAXException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
} catch (ParserConfigurationException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}//newDocumentBuilder()是一个抽象方法
System.out.println(book1.getYear());
System.out.println(book1.getAuthor());
System.out.println(book1.getLanguage());
System.out.println(book1.getPrice());
System.out.println(book1.getYear());
System.out.println(book2.getYear());
System.out.println(book2.getAuthor());
System.out.println(book2.getLanguage());
System.out.println(book2.getPrice());
System.out.println(book2.getYear());
}
}
创建book类,应该包含XML文件中所有的属性,然后每读到一本书的时候就创建一个book对象,并将其中的属性保存对相对应的对象属性中。然后将book对象最为集合保存起来。
Java眼中的XML---文件读取
83202 学习 · 431 问题
相似问题