这个写法可以,很有规范
视频中的代码完全可以直接用。。。
中间有文本节点,k为0的时候是文本节点,过不了if语句,你看看
不会吧。。代码没问题。。我用我的程序跑了一遍能够正确打印出。。你可以使用debug看一看每一步语句的值,检查book、booklist是否读了值
i 改成j
嘿嘿嘿嘿嘿嘿嘿
标签内的 文本内容也是子节点,你解析了吗
老师编写的books.xml文件默认是ansi编码的,需要进行另存时把ansi改为UTF-8哦,然后再复制到eclipse就可以了,这样就不会有中文乱码了,我刚刚试过可以滴
项目编码方式与xml的编码方式必须一致,xml声明中encoding="UTF-8",并且xml的保存格式也是utf-8你可以打开xml文件然后另存为看看是不是格式出了问题
你的if条件块,没有将两个输出语句都括起来,循环结束后第二个语句再用它就会空指针异常
book.xml的文件错了,找找xml的问题
用右键的run as -中的java application试试,我刚开始时也有过这种情况
给一下代码把
怎么判断,节点的getFirstChild()方法为null,说明没有子节点。
但是xml本身是自己用来存储项目小型数据的,节点怎么命名,自己说了算,一般不可能不知道,不过你这种规避错误的思维很好。
我喜欢刨根问底,虽然记住了过程,不影响这部分知识的运用,不过不弄请楚,老感觉别扭。你的回答,我不是很理解,我也百度了好久,都没有明确说明这个问题的。但我在查DOM的时候,才知道,其本身是浏览器内嵌的一个标准借口,Node,NodeList,Document等都是DOM中的接口,其方法应该是在DOM中实现的,而java只不过是引入了这些借口,其DocumentBuilderFactory和DocumentBuilder才是自身的,通过他们可以建立java和dom的通道,可以调用dom同名借口中的方法,其实那些方法都是DOM中的。
可能是你文件的路径包含空格或者非法字符
Alt+/
通过记事本打开xml文件,另存的时候把下面的编码从ANSI改成UTF-8
一种方法是创建一个book类,包含所有属性,然后使用多个构造方法但参数不同,另一种方法是创建抽象父类,用book的子类去继承
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包下,确定此是否正确?!
单纯从你给的代码来看,没有问题!
以上是思路
没有上传就不能下载,上传了就可以在资料下载中看得到
估计就是xml文件问题,尤其注意?和xml之间没有空格
例子<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
代码中有空的节点 会抛出异常