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

谁有作业的答案?

谁有作业的答案?就是视频最后保存到集合中。还有一个问题属性值的时候需要for循环,怎么到了节点的时候没有for循环了呢?

正在回答

3 回答

package com.test;

import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class DOM4JTest {
	
	private static List<Book> books = new ArrayList<Book>();

	public static void main(String[] args) {
		// 解析books.xml
		SAXReader reader = new SAXReader();
		try {
			Document document = reader.read(new File("src/res/books.xml"));
			Element bookStore = document.getRootElement();
			Iterator it = bookStore.elementIterator();
			while(it.hasNext()){
				Book bookEntity = new Book();
				Element book = (Element)it.next();
				List<Attribute> bookAttrs = book.attributes();
				for (Attribute attr : bookAttrs) {
					System.out.println(attr.getName()+"->"+attr.getValue());
					if(attr.getName().equals("id")){
						bookEntity.setId(attr.getValue());
					}
					
				}
				
				Iterator itt = book.elementIterator();
				while(itt.hasNext()){
					Element bookChild = (Element)itt.next();
					System.out.println(bookChild.getName()+"->"+bookChild.getStringValue());
					switch (bookChild.getName()) {
					case "name":
						bookEntity.setName(bookChild.getStringValue());
						break;
					case "author":
						bookEntity.setAuthor(bookChild.getStringValue());
						break;
					case "year":
						bookEntity.setYear(bookChild.getStringValue());
						break;
					case "price":
						bookEntity.setPrice(bookChild.getStringValue());
						break;
					case "language":
						bookEntity.setLanguage(bookChild.getStringValue());
						break;

					default:
						break;
					}
				}
				
				books.add(bookEntity);
				bookEntity=null;
				System.out.println("--------------------------------");
			}
			for (Book book : books) {
				System.out.println(book.toString());
				System.out.println("--------------------------------");
			}
			
		} catch (DocumentException e) {
			e.printStackTrace();
		}

	}

}


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

玄鉴 提问者

非常感谢!非常感谢
2016-08-16 回复 有任何疑惑可以回复我~
package com.test;

public class Book {
	private String id;
	private String name;
	private String author;
	private String year;
	private String price;
	private String language;
	
	@Override
	public String toString() {
		return ("id->"+id+"\nname->"+name+"\nauthor->"+author+"\nyear->"+year+"\nprice->"+price+"\nlanguage->"+language);
	}
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public String getYear() {
		return year;
	}
	public void setYear(String year) {
		this.year = year;
	}
	public String getPrice() {
		return price;
	}
	public void setPrice(String price) {
		this.price = price;
	}
	public String getLanguage() {
		return language;
	}
	public void setLanguage(String language) {
		this.language = language;
	}

}


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

for循环是为了遍历,每个book节点下的属性值和属性名。而下面是用了while循环遍历book下的节点名,和节点值。其实性质是一样的。而且在上一个循环也有用到一个while循坏来遍历book的个数的,但还需要遍历book里面的属性名和值,所以需要都一层循环而已。

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

举报

0/150
提交
取消

谁有作业的答案?

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