为了账号安全,请及时绑定邮箱和手机立即绑定

有把老师最后的那个联系做了的吗?

有把老师最后的那个联系做了的吗?

正在回答

4 回答

在3-4 中你会看到用SAX将XML文件存储在Book类中......那个比较容易理解

0 回复 有任何疑惑可以回复我~
#1

网络小曦 提问者

非常感谢!
2015-09-17 回复 有任何疑惑可以回复我~

前提是我们不知道xml中的那些内容啊,要是所有属性都知道了,那叫我们解析xml文件的内容就没有意义了


0 回复 有任何疑惑可以回复我~

//勉强写出来了,大家凑合看

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());

}


}



2 回复 有任何疑惑可以回复我~

创建book类,应该包含XML文件中所有的属性,然后每读到一本书的时候就创建一个book对象,并将其中的属性保存对相对应的对象属性中。然后将book对象最为集合保存起来。

1 回复 有任何疑惑可以回复我~
#1

CyberLiu

这样子写没什么难度,我想的是不知道book的属性,不知道有没有name price 之类的,获取一个属性之后就传给List集合中存储的book相应的属性,最后统一输出。也就是不管我在xml文件中定义了多少个子节点,不用提前在Book类中事先定义相应的属性,就可以得到结果。不过没什么思路。
2015-09-25 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

有把老师最后的那个联系做了的吗?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信