第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么我輸出的value都是null呢,跟老師一樣的代碼

輸出:

SAX解析開始

=========開始遍歷第1本書的內(nèi)容=========

book元素的第1個屬性名是:id---屬性值是:1

節(jié)點名是:name-----節(jié)點值是:冰與火之歌

節(jié)點名是:author-----節(jié)點值是:喬治馬丁

節(jié)點名是:year-----節(jié)點值是:2014

節(jié)點名是:price-----節(jié)點值是:89

===========結(jié)束遍歷第1本書的內(nèi)容===============

=========開始遍歷第2本書的內(nèi)容=========

book元素的第1個屬性名是:id---屬性值是:2

節(jié)點名是:name-----節(jié)點值是:安徒生童話

節(jié)點名是:year-----節(jié)點值是:2004

節(jié)點名是:price-----節(jié)點值是:77

節(jié)點名是:language-----節(jié)點值是:English

===========結(jié)束遍歷第2本書的內(nèi)容===============

SAX解析結(jié)束

?。?!共有2本書!

null

null

null

null

89

null

------finish-------

null

null

null

null

null

English

------finish-------


SAXTest類:

package com.immoc.test;


import java.io.IOException;


import javax.xml.parsers.ParserConfigurationException;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;


import org.xml.sax.SAXException;


import com.imooc.entity.Book;

import com.imooc.handler.SAXPAarserHandler;


public class SAXTest {


public static void main(String[] args) {

//獲取一個SAXparserFactory的實例

SAXParserFactory factory=SAXParserFactory.newInstance();

//通過factory獲取SAXparser實例

try {

SAXParser parser=factory.newSAXParser();

//創(chuàng)建SAXParserHandler對象

SAXPAarserHandler handler=new SAXPAarserHandler();

parser.parse("books.xml", handler);

System.out.println("?。?!共有"+handler.getBookList().size()+"本書!");

for (Book book :handler.getBookList() ) {

System.out.println(book.getId());

System.out.println(book.getName());

System.out.println(book.getAuthor());

System.out.println(book.getYear());

System.out.println(book.getPrice());

System.out.println(book.getLanguage());

System.out.println("------finish-------");

}

} 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();

}


}


}

以下是SAXParseHandler類代碼:

package com.imooc.handler;


import java.util.ArrayList;


import javax.xml.stream.events.StartElement;


import org.xml.sax.Attributes;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;


import com.imooc.entity.Book;


public class SAXPAarserHandler extends DefaultHandler {

int bookIndex=0;

String value=null;

//創(chuàng)建一個book對象

Book book=null;

private ArrayList<Book> bookList=new ArrayList<Book>();

// /**

// *?

// * 用來遍歷xml文件的開始標(biāo)簽

// */

// @Override

// public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {

// // TODO Auto-generated method stub

// super.startElement(uri, localName, qName, attributes);

// }

//

// /**

// *?

// * 用來遍歷xml文件的結(jié)束標(biāo)簽

// */

// @Override

// public void endElement(String uri, String localName, String qName) throws SAXException {

// // TODO Auto-generated method stub

// super.endElement(uri, localName, qName);

// }

public ArrayList<Book> getBookList() {

return bookList;

}

/**

*?

* 用來標(biāo)識解析開始

*/

@Override

public void startDocument() throws SAXException {

// TODO Auto-generated method stub

super.startDocument();

System.out.println("SAX解析開始");

}

/**

*?

* 用來標(biāo)識解析結(jié)束

*/

@Override

public void endDocument() throws SAXException {

// TODO Auto-generated method stub

super.endDocument();

System.out.println("SAX解析結(jié)束");

}

/**

* 解析xml元素

*?

*/

@Override

public void startElement(String uri, String localName,?

String qName, Attributes attributes) throws SAXException {

// TODO Auto-generated method stub

//調(diào)用DefaultHandler類的startElemnet方法

super.startElement(uri, localName, qName, attributes);

//開始解析book元素的屬性

//創(chuàng)建一個book對象

book=new Book();

if(qName.equals("book")){

bookIndex++;


//開始解析book元素的屬性

System.out.println("=========開始遍歷第"+bookIndex+"本書的內(nèi)容=========");

// //已知book元素下屬性的名稱,根據(jù)屬性名稱獲取屬性值

// String value=attributes.getValue("id");

// System.out.println("book的屬性值是:"+value);

//不知道book元素下屬性的名稱以及個數(shù),如何獲取屬性名以及屬性值

int num=attributes.getLength();

for(int i=0;i<num;i++){

System.out.print("book元素的第"+(i+1)+"個屬性名是:"

+attributes.getQName(i));

System.out.println("---屬性值是:"

+attributes.getValue(i));

//把bookid寫入對象

if(attributes.getQName(i).equals("id")){

book.setId(attributes.getValue(i));

}

}

}else if(!qName.equals("book") && !qName.equals("bookstore")){

System.out.print("節(jié)點名是:"+qName+"-----");

}

}

@Override

public void endElement(String uri, String localName, String qName) throws SAXException {

//調(diào)用DefaultHandler類的endElemnet方法

super.endElement(uri, localName, qName);

//判斷是否針對一本書已經(jīng)遍歷結(jié)束

if(qName.equals("book")){

bookList.add(book);

book=null;

System.out.println("===========結(jié)束遍歷第"+bookIndex+"本書的內(nèi)容===============");

}

else if(qName.equals("name")){

book.setName(value);

}

else if(qName.equals("author")){

book.setAuthor(value);

}

else if(qName.equals("year")){

book.setYear(value);

}

else if(qName.equals("price")){

book.setPrice(value);

}

else if(qName.equals("language")){

book.setLanguage(value);

}

}

@Override

public void characters(char[] ch, int start, int length) throws SAXException {

// TODO Auto-generated method stub

super.characters(ch, start, length);

value=new String(ch, start, length);

if(!value.trim().equals("")){

System.out.println("節(jié)點值是:"+value);

}

}

}

請問到底哪里錯了啊,

正在回答

4 回答

http://img1.sycdn.imooc.com//5a780eeb0001e22508430212.jpg

樓上的正解。startElement方法遇到節(jié)點就解析,你的代碼相當(dāng)于每次都在new Book();

至于為什么還是有2個book,是因為你在endElement方法的時候判斷book標(biāo)簽了,而book結(jié)束標(biāo)簽只有2個,

所以你添加了2個null的book內(nèi)容。

1 回復(fù) 有任何疑惑可以回復(fù)我~

終于搞明白了,為啥你輸出的都是null。

book=new Book();

if(qName.equals("book")){

bookIndex++;

應(yīng)該是每次訪問的book標(biāo)簽時創(chuàng)建book對象,而不是你代碼里寫的每個標(biāo)簽開始都創(chuàng)建一個book對象。

因為一直在新建book對象,所以只能存儲當(dāng)前的屬性值,下一個標(biāo)簽值就自動變成null

0 回復(fù) 有任何疑惑可以回復(fù)我~

這是book類

package com.imooc.entity;


public class Book {

private String id;

private String name;

private String author;

private String year;

private String price;

private String 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 回復(fù) 有任何疑惑可以回復(fù)我~

可以看一下你的Book類怎么寫的嗎?另外SAXTest類的包名package com.immoc.test;是不是打錯了?

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

thomasstar 提問者

book類的代碼放到樓下啦。 另外包名沒錯,我命的名就是immoc哈哈
2017-02-19 回復(fù) 有任何疑惑可以回復(fù)我~

舉報

0/150
提交
取消

為什么我輸出的value都是null呢,跟老師一樣的代碼

我要回答 關(guān)注問題
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號