都是已存在
这个写法可以,很有规范
慕函数1102100
视频中的代码完全可以直接用。。。
weixin_慕数据4535530
中间有文本节点,k为0的时候是文本节点,过不了if语句,你看看
qq_慕勒0009456
不会吧。。代码没问题。。我用我的程序跑了一遍能够正确打印出。。你可以使用debug看一看每一步语句的值,检查book、booklist是否读了值

qq_慕勒0009456
i 改成j
qq_從南_nqCMU0
嘿嘿嘿嘿嘿嘿嘿
慕无忌546367
标签内的 文本内容也是子节点,你解析了吗
1115498377
qq_申光跃_0
老师编写的books.xml文件默认是ansi编码的,需要进行另存时把ansi改为UTF-8哦,然后再复制到eclipse就可以了,这样就不会有中文乱码了,我刚刚试过可以滴

qq_申光跃_0
项目编码方式与xml的编码方式必须一致,xml声明中encoding="UTF-8",并且xml的保存格式也是utf-8你可以打开xml文件然后另存为看看是不是格式出了问题
RoyalT
你的if条件块,没有将两个输出语句都括起来,循环结束后第二个语句再用它就会空指针异常
ZoeHom
book.xml的文件错了,找找xml的问题
慕莱坞602254
用右键的run as -中的java application试试,我刚开始时也有过这种情况
qq_不像我以后你就完了_0
给一下代码把
慕粉2138545409
怎么判断,节点的getFirstChild()方法为null,说明没有子节点。
但是xml本身是自己用来存储项目小型数据的,节点怎么命名,自己说了算,一般不可能不知道,不过你这种规避错误的思维很好。
啊噗
慕粉4014187从头再来
我喜欢刨根问底,虽然记住了过程,不影响这部分知识的运用,不过不弄请楚,老感觉别扭。你的回答,我不是很理解,我也百度了好久,都没有明确说明这个问题的。但我在查DOM的时候,才知道,其本身是浏览器内嵌的一个标准借口,Node,NodeList,Document等都是DOM中的接口,其方法应该是在DOM中实现的,而java只不过是引入了这些借口,其DocumentBuilderFactory和DocumentBuilder才是自身的,通过他们可以建立java和dom的通道,可以调用dom同名借口中的方法,其实那些方法都是DOM中的。
qq_筑城以北_04274162
可能是你文件的路径包含空格或者非法字符
DA7
Alt+/
非入门程序员
通过记事本打开xml文件,另存的时候把下面的编码从ANSI改成UTF-8
谜之米
一种方法是创建一个book类,包含所有属性,然后使用多个构造方法但参数不同,另一种方法是创建抽象父类,用book的子类去继承
EdSheeran
thx,这个问题我已经知道答案,谢谢大家的回答
差三岁4185231
package com.javatoxml.dom4jtest;
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;
import com.javatoxml.entiry.Book;
public class DOM4JTest {
// private static Book bookEntiry ;
private static ArrayList<Book> booksList = new ArrayList<Book>();
public static void main(String[] args) {
//创建SAXReader对象
SAXReader reader = new SAXReader();
//通过reader方法加载books.xml文件
try {
Document document = reader.read(new File("src/res/books.xml"));
//通过document对象获取根节点bookStore
Element bookStore = document.getRootElement();
//通过element对象的elementIterator方法获取迭代器
Iterator it = bookStore.elementIterator();
//历遍迭代器,获取根节点中的信息
while (it.hasNext()) {
Book bookEntiry = new Book();
Element book = (Element)it.next();
//获取book的属性名以及属性值
List<Attribute> bookAttrs = book.attributes();
for (Attribute attr : bookAttrs) {
System.out.println("属性名:" + attr.getName() + "---属性值:" + attr.getValue());
bookEntiry.setId(attr.getValue());
}
Iterator itt = book.elementIterator();
while (itt.hasNext()) {
Element bookChild = (Element) itt.next();
System.out.println("节点名:" + bookChild.getName() + "---节点值:" + bookChild.getStringValue());
if (bookChild.getName().equals("name")) {
bookEntiry.setName(bookChild.getStringValue());
} else if (bookChild.getName().equals("author")){
bookEntiry.setAuthor(bookChild.getStringValue());
} else if (bookChild.getName().equals("year")) {
bookEntiry.setYear(bookChild.getStringValue());
} else if (bookChild.getName().equals("price")) {
bookEntiry.setPrice(bookChild.getStringValue());
} else if (bookChild.getName().equals("language")) {
bookEntiry.setLanguage(bookChild.getStringValue());
}
}
booksList.add(bookEntiry);
System.out.println(booksList.size());
bookEntiry = null;
}
for (Book books : booksList) {
System.out.println(books.getId());
System.out.println(books.getName());
System.out.println(books.getAuthor());
System.out.println(books.getYear());
System.out.println(books.getPrice());
System.out.println(books.getLanguage());
System.out.println("------finishi-----");
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//在接下来学习DOM4J解析中你能找到答案,代码注释已经写的很清楚了
永远的小菜鸟
你books.xml中的内容对不对
永远的小菜鸟
完整的错误提示是什么,相关编码有哪些?
xml文件是否放在了当前项目下的正确位置?
Document是W3C包下的,非Swing包下,确定此是否正确?!
单纯从你给的代码来看,没有问题!
以上是思路
慕粉4386963
熊二ya
没有上传就不能下载,上传了就可以在资料下载中看得到
碎月染指年华
估计就是xml文件问题,尤其注意?和xml之间没有空格
fengh
例子<name>乔治马丁</name>中,name节点getFirstChild()得到的是text文本即乔治马丁,根据常用节点类型表,text类型的nodeValue方法返回其节点内容,故将<name></name>之间的文本内容打印出来。
而,<name><a>aa</a>乔治马丁</name>中,name节点getFirstChild()得到的是Element a,根据常用节点类型表,Element类型的nodeValue方法返回null,故打印出null。
丶子非鱼
右键点击xml文件,选择properties,选择resource,选择Text file encoding的值为utf-8