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

代码运行问题

package com.imooc.dmtest.test;


import java.io.*;


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 DOMTest {


public static void main(String[] args){

// 创建一个DocumentBuilderFactory的对象

DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();

//创建一个DocumentBuilder对象

try {

DocumentBuilder db=dbf.newDocumentBuilder();

//通过DocumentBuilder对象的parse方法加载bookstore.xml文件到当前项目下

Document document=db.parse("bookstore.xml");

//获取所有book的节点

NodeList bookList=document.getElementsByTagName("book");

//通过nodeList中的getLength()方法获取book的长度

System.out.println("一共有:"+bookList.getLength()+"本书");

//遍历每一个book节点

for(int i=0;i<bookList.getLength();i++){

System.out.println("=========下面开始遍历第"+(i+1)+"本书的内容=========");

//通过bookList.item()方法获取每一个节点

Node book=bookList.item(i);

//获取book节点所有属性集合

NamedNodeMap attrs=book.getAttributes();

System.out.println("第"+(i+1)+"本书共有"+attrs.getLength()+"个属性");

//遍历book的属性

for(int j=0;j<attrs.getLength();j++){

//通过item(i)方法获取book节点的某一个属性

Node attr=attrs.item(j);

//获取属性名

System.out.print("属性名:"+attr.getNodeName());

//获取属性值

System.out.println("--属性值:"+attr.getNodeValue());

}

System.out.println("=========结束遍历第"+(i+1)+"本书的内容=========");

}

} catch (ParserConfigurationException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SAXException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

代码是按照老师讲的敲上去的,运行结果如下:

com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 1 字节的 UTF-8 序列的字节 1 无效。

at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(UTF8Reader.java:687)

at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(UTF8Reader.java:557)

at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1753)

at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.peekChar(XMLEntityScanner.java:497)

at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2710)

at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)

at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)

at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)

at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)

at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)

at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243)

at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:347)

at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)

at com.imooc.dmtest.test.DOMTest.main(DOMTest.java:24)

有没有遇到相同问题,并且解决的同学?

正在回答

2 回答

你books.xml中的内容对不对

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

永远的小菜鸟 提问者

和视频中的内容一样,就是名字不一样!视频中的是“books.xml”,我的是“bookstore.xml”
2016-12-02 回复 有任何疑惑可以回复我~
#2

慕斯0674022 回复 永远的小菜鸟 提问者

我电脑上是可以运行的 你试试看修改项目的编码方式
2016-12-02 回复 有任何疑惑可以回复我~
#3

永远的小菜鸟 提问者 回复 慕斯0674022

好的,我试试!谢谢啊!
2016-12-02 回复 有任何疑惑可以回复我~
#4

永远的小菜鸟 提问者 回复 慕斯0674022

朋友你好!前边你说的“修改项目的编码方式”是不是把myeclipse中的改为“gbk”或者“utf-8”?我这边还是不行!!
2016-12-02 回复 有任何疑惑可以回复我~
#5

慕斯0674022 回复 永远的小菜鸟 提问者

那我就不知道了……把你的代码拷下来只修改了xml的名称 就可以运行
2016-12-02 回复 有任何疑惑可以回复我~
#6

永远的小菜鸟 提问者

非常感谢!
2016-12-03 回复 有任何疑惑可以回复我~
#7

慕斯0674022 回复 永远的小菜鸟 提问者

搞定了吗……
2016-12-03 回复 有任何疑惑可以回复我~
查看4条回复

把那个UTF-8改成gbk就可以了

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

举报

0/150
提交
取消
Java眼中的XML---文件读取
  • 参与学习       83198    人
  • 解答问题       431    个

通过Java认识并且创造XML文件,如何应用 Java“解析 XML

进入课程

代码运行问题

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