皈依__
恩恩是的,挺奇妙的吧,嘿嘿,可以一起交流 一起学习
张禹专
如果你是想自己输入字符串加进去的话,把他toCharArray再用之前的方法加进去就好了,区间就是0到length-1
花语天天
setAttribute() 方法增加一个指定名称和值的新属性,或者把一个现有的属性设定为指定的值。注意关键点是"一个"
ld待续
不会呀,代码错了?
三袋
既然是空值<name/>和<name></name>是一样的,没有必要纠结这个吧
无精疯
我个人操作是在导入的XML文件中读取的数据,编辑数据也只是在这个文件中进行操作.
西昌
public void SAXWriteXml() {
List<Book> bookList = SAXReadXml();
// 1 创建SAXTransformerFactory类的对象
SAXTransformerFactory stff = (SAXTransformerFactory) SAXTransformerFactory
.newInstance();
try {
// 2通过SAXTransformerFactory对象创建一个TransformerHandler对象
TransformerHandler handler = stff.newTransformerHandler();
// 3通过handler创建Transformer对象
Transformer tf = handler.getTransformer();
// 4通过Transformer对象对生成的xml文件进行设置
tf.setOutputProperty(OutputKeys.ENCODING, "utf-8");
tf.setOutputProperty(OutputKeys.INDENT, "yes");
// 5创建一个Result对象
File file = new File("source/shuji.xml");
if (!file.exists()) {
file.createNewFile();
}
// 6创建Result对象,result与handler关联
Result result = new StreamResult(new FileOutputStream(file));
handler.setResult(result);
// 7利用Handler对象进行xml文件内容的填充
// 打开document文档
handler.startDocument();
AttributesImpl atts = new AttributesImpl();
handler.startElement("", "", "bookstore", atts);
for (Book book : bookList) {
atts.clear();
atts.addAttribute("", "", "id", "", book.getId());
handler.startElement("", "", "book", atts);
atts.clear();
// 创建name节点
if ((book.getName() != null)
&& !book.getName().trim().equals("")) {
atts.clear();
System.out.println("+++++name+++++");
handler.startElement("", "", "name", atts);//这里没有执行
System.out.println("+++++name+++++");
handler.characters(book.getName().toCharArray(), 0, book
.getName().length());
handler.endElement("", "", "name");
}
if (!book.getAuthor().trim().equals("")
&& (book.getAuthor() != null)) {
atts.clear();
System.out.println("+++++author+++++");
handler.startElement("", "", "author", atts);
handler.characters(book.getAuthor().toCharArray(), 0, book
.getAuthor().length());
handler.endElement("", "", "author");
}
if (!book.getYear().trim().equals("")
&& (book.getYear() != null)) {
atts.clear();
handler.startElement("", "", "year", atts);
handler.characters(book.getYear().toCharArray(), 0, book
.getYear().length());
handler.endElement("", "", "year");
}
if (!book.getPrice().trim().equals("")
&& (book.getPrice() != null)) {
atts.clear();
handler.startElement("", "", "price", atts);
handler.characters(book.getPrice().toCharArray(), 0, book
.getPrice().length());
handler.endElement("", "", "price");
}
if (!book.getLanguage().trim().equals("")
&& (book.getLanguage() != null)) {
atts.clear();
handler.startElement("", "", "language", atts);
handler.characters(book.getLanguage().toCharArray(), 0,
book.getLanguage().length());
handler.endElement("", "", "language");
}
handler.endElement("", "", "book");
}
handler.endElement("", "", "bookstore");
// 关闭document
handler.endDocument();
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
}
//异常
Exception in thread "main" java.lang.NullPointerException
at com.sun.org.apache.xml.internal.serializer.ToStream.writeAttrString(ToStream.java:1967)
at com.sun.org.apache.xml.internal.serializer.ToStream.processAttributes(ToStream.java:1947)
at com.sun.org.apache.xml.internal.serializer.ToStream.closeStartTag(ToStream.java:2443)
at com.sun.org.apache.xml.internal.serializer.ToStream.startElement(ToStream.java:1783)
at com.sun.org.apache.xml.internal.serializer.ToUnknownStream.startElement(ToUnknownStream.java:548)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerHandlerImpl.startElement(TransformerHandlerImpl.java:267)
at com.live.imooc.test.SAXTest.SAXWriteXml(SAXTest.java:70)
at com.live.imooc.test.SAXTest.main(SAXTest.java:31)上面是我写的函数;报的错误是空指针异常。
霸道的樱木
我之前也出现过这个问题;你是不是在for语句里面释放了book = null;然后没有new再调用就会出现这个问题.
qq_一天十小时_0
去除空格与换行符
J_Dev
package com.imooc.test;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.AttributesImpl;
public class SaxTest {
public ArrayList<Book> xmlParse(){
SAXParserFactory factory=SAXParserFactory.newInstance();
HandlerTest handler=null;
try {
SAXParser parser=factory.newSAXParser();
handler=new HandlerTest();
parser.parse("f:\\books.xml",handler);
/* System.out.println("----共有"+handler.getBookList().size()+"本书-----");
for(Book book1:handler.getBookList()){//遍历booList中的内容
System.out.println("===========开始==========");
System.out.println(book1.getID());
System.out.println(book1.getName());
System.out.println(book1.getAuthor());
System.out.println(book1.getYear());
System.out.println(book1.getPrice());
System.out.println(book1.getLanguage());
System.out.println("===========结束==========");
}*/
} 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();
}
return handler.getBookList();
}
public void xmlCreate(){
ArrayList<Book> booklist=xmlParse();
SAXTransformerFactory tff=(SAXTransformerFactory) SAXTransformerFactory.newInstance();
try {
TransformerHandler handler=tff.newTransformerHandler();
Transformer tf=handler.getTransformer();
tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
tf.setOutputProperty(OutputKeys.INDENT, "yes");
File f=new File("src/res/newbooks.xml");
if(!f.exists()){
f.createNewFile();
}
Result result=new StreamResult(new FileOutputStream(f));
handler.setResult(result);
handler.startDocument();
AttributesImpl attr=new AttributesImpl();
handler.startElement("","","bookStore",attr);
for(Book book:booklist){
attr.clear();
attr.addAttribute("", "", "id","",book.getID());
handler.startElement("","","book",attr);
if(book.getName()!=null&&!book.getName().trim().equals("")){
attr.clear();
handler.startElement("", "","name", attr);
handler.characters(book.getName().toCharArray(), 0,book.getName().length());
handler.endElement("","","name");
}
if(!book.getAuthor().equals(null)&&!book.getAuthor().trim().equals("")){
attr.clear();
handler.startElement("", "","author", attr);
handler.characters(book.getAuthor().toCharArray(), 0,book.getAuthor().length());
handler.endElement("","","author");
}
if(book.getYear()!=null&&!book.getYear().trim().equals("")){
attr.clear();
handler.startElement("", "","year", attr);
handler.characters(book.getYear().toCharArray(), 0,book.getYear().length());
handler.endElement("","","year");
}
if(book.getLanguage()!=null&&!book.getLanguage().trim().equals("")){
attr.clear();
handler.startElement("", "","language", attr);
handler.characters(book.getLanguage().toCharArray(), 0,book.getLanguage().length());
handler.endElement("","","language");
}
if(book.getPrice()!=null&&!book.getPrice().trim().equals("")){
attr.clear();
handler.startElement("", "","price", attr);
handler.characters(book.getPrice().toCharArray(), 0,book.getPrice().length());
handler.endElement("","","price");
}
handler.endElement("","","book");
}
handler.endElement("","","bookStore");
handler.endDocument();
} catch (TransformerConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
SaxTest test=new SaxTest();
test.xmlCreate();
}
}代码的位置放置不对
土豆酚酞
找到了,多加了一句handler.endElement
我不要昵称
不停地追逐
获取的某个对象为null时,调用该对象的方法就会报空指针,检查一下代码,看哪个对象为空。
慕勒7110228