会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132360个问题
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器 391楼

image.png

老师,为什么会报错?我明明实例化了Book对象。

package com.bjsxt.dom4j;

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

import java.awt.print.Book;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class TestDOM4J {
    public static void main(String[] args) throws DocumentException {
        //(1) 创建SAXReader对象
        SAXReader reader = new SAXReader();
        //(2) 调用read方法
        Document doc = reader.read(new File("book.xml"));
        //(3) 获取根元素
        Element root = doc.getRootElement(); //books
        //(4) 通过迭代器遍历直接节点
        for (Iterator<Element> iteBook = root.elementIterator(); iteBook.hasNext();){
            Element bookEle = iteBook.next();
            //得到book的属性
            for (Iterator<Attribute> iteAtt= bookEle.attributeIterator(); iteAtt.hasNext();){
                Attribute att = iteAtt.next();
                System.out.println(att.getName()+"\t"+att.getText());
            }

        }
        System.out.println("----------------------------------------");
        List<Book> bookList = new ArrayList<>();
        for (Iterator<Element> iteBook=root.elementIterator();iteBook.hasNext();){
            //创建一个Book对象
            Book book = new Book();
            Element bookEle = iteBook.next(); //得到每一个book
            //使用for循环继续遍历
            for (Iterator<Element> subBookEle = bookEle.elementIterator();subBookEle.hasNext();){
                //得到每一个子元素
                Element subEle = subBookEle.next();
                System.out.println(subEle.getName()+"\t"+subEle.getText());
                /*
                * 分装成Book对象
                * */
                //获取节点的名称
                String nodeName = subEle.getName();   //name,author,price
                //使用switch判断
                switch (nodeName){
                    case "name":
                        book.setName(subEle.getText());
                        break;
                    case "author":
                        book.setAuthor(subEle.getText());
                        break;
                    case "price":
                        book.setPrice(Double.parseDouble(subEle.getText()));
                        break;
                }

            }
            //添加集合中
            bookList.add(book);
        }
        //遍历集合
        System.out.println("\n遍历集合-----------------------\n");
        for (Book b: bookList){
            System.out.println(b.getName()+"\t"+b.getAuthor()+"\t"+b.getPrice());
        }
    }
}
package com.bjsxt.entity;

public class Book {
    //私有属性
    private String name;
    private String author;
    private double price;

    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 double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public Book() {
    }

    public Book(String name, String author, double price) {
        this.name = name;
        this.author = author;
        this.price = price;
    }
}


JAVA 全系列/第二阶段:JAVA 基础深化和提高/XML 技术(旧) 392楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器 393楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/IO流技术 394楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/反射技术(旧) 395楼

package DOM方式;


import java.io.IOException;


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

public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {

//(1) 创建一个DocumentBuilderFactory的对象

DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();

//(2)创建DocumenyBuilder对象

DocumentBuilder db=dbf.newDocumentBuilder();

//(3)通过DocumentBuilder的parse(. . .)方法得到Document对象

Document doc=db.parse("book.xml");

//(4)通过getElementsByTagName(. . .)方法获取到节点的列表

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

System.out.println(bookList.getLength());

//(5)通过for循环遍历,每一个节点

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

//(6)得到每一个节点的属性和属性值

Node book=bookList.item(i);

NamedNodeMap attrs=book.getAttributes(); //得到属性的集合

//遍历每一个属性

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

//得到每一个属性

Node id=attrs.item(j);

System.out.println("属性的名称"+id.getNodeName()+"\t"+id.getNodeValue());

}

}

System.out.println("\n每个节点的名称和节点的值");

//(7)得到每个节点名和节点值

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

//得到每一个book节点

Node book=bookList.item(i);

NodeList subNode=book.getChildNodes();

//使用for循环遍历每一个book的子节点

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

Node childNode=subNode.item(j);

//System.out.println(childNode.getNodeName());

short type=childNode.getNodeType();//获取节点的类型

if(type==childNode.getNodeType()) {

System.out.println("节点的名称:"+childNode.getNodeName()+"\t"+childNode.getTextContent());

}

}

}

}

}



这是books

<?xml version="1.0" encoding="UTF-8"?>

<books>

<book id="1001">

<name>Java开发</name>

<author>张小三</author>

<price>98.5</price>

</book>

<book id="1002">

<name>李四</name>

<author>Java</author>

<price>99.2</price>

</book>

</books>



这是错误

Exception in thread "main" java.io.FileNotFoundException: D:\java\第二阶段\XML技术\books.xml (系统找不到指定的文件。)

at java.base/java.io.FileInputStream.open0(Native Method)

at java.base/java.io.FileInputStream.open(FileInputStream.java:213)

at java.base/java.io.FileInputStream.<init>(FileInputStream.java:155)

at java.base/java.io.FileInputStream.<init>(FileInputStream.java:110)

at java.base/sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:86)

at java.base/sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:184)

at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:654)

at java.xml/com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:150)

at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:860)

at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)

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

at java.xml/com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:246)

at java.xml/com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)

at java.xml/javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:178)

at DOM方式.TesTDDMParse.main(TesTDDMParse.java:25)




blob.png



JAVA 全系列/第二阶段:JAVA 基础深化和提高/XML 技术(旧) 399楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/IO 流技术(旧) 403楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/多线程技术(旧) 404楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637