返回信息流是按照书上做的,为什么执行老出错
错误为:
[Fatal Error] books.xml:2:6: The processing instruction target matching "[xX][mM][lL]" is not allowed.
Exception:The processing instruction target matching "[xX][mM][lL]" is not allowed.
Exception: null
Exception in thread "main" java.lang.NullPointerException
at JAXPSample.addBook(JAXPSample.java:63)
at JAXPSample.main(JAXPSample.java:96)
处理xml文件的应用程序如下:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Result;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.Source;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import java.io.File;
public class JAXPSample {
private String filename="books.xml";
private Document doc=null;
public JAXPSample(){
try{
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder parser=factory.newDocumentBuilder();
doc=parser.parse(filename);
}catch(Exception e){System.err.println("Exception:"+e.getMessage());
}
}
public void printBooks(){
try{
NodeList books=doc.getElementsByTagName("book");
if(books!=null){
for(int i=0;i<books.getLength();i++){
Node book=books.item(i);
String author=book.getAttributes().getNamedItem("author").getNodeValue();
String email=book.getAttributes().getNamedItem("email").getNodeValue();
NodeList bookinfo=book.getChildNodes();
String title=null;
String description=null;
for(int j=0;j<bookinfo.getLength();j++){
if(bookinfo.item(j).getNodeName().equalsIgnoreCase("title")){
title=bookinfo.item(j).getTextContent();
}//if
else if(bookinfo.item(j).getNodeName().equalsIgnoreCase("description")){
description=bookinfo.item(j).getTextContent();
}//elseif
}//for
System.out.println("'"+title+"'by"+"author("+email+"): "+description);
}//for
}//if
}catch(Exception e){
System.err.println("Exception: "+e.getMessage());
}
}
public void addBook(){
try{
Element root=doc.getDocumentElement();
Element book=doc.createElement("book");
root.appendChild(book);
book.setAttribute("author", "robert");
book.setAttribute("email","robert@press.com");
Element title=doc.createElement("title");
String str_title="Keep smile on your face!";
Text t_title=doc.createTextNode(str_title);
title.appendChild(t_title);
book.appendChild(title);
Element description=doc.createElement("description");
String str_desc="Robert will show you amazing effect of smiling.";
Text t_desc=doc.createTextNode(str_desc);
description.appendChild(t_desc);
book.appendChild(description);
Source source=new DOMSource(doc);
File file=new File(filename);
Result result=new StreamResult(file);
Transformer xformer=TransformerFactory.newInstance().newTransformer();
xformer.transform(source,result);
}
catch(TransformerConfigurationException e){
System.err.println("Exception: "+e.getMessage());
}
catch(TransformerException e){
System.err.println("Exception: "+e.getMessage());
}
}
public static void main(String[] args){
JAXPSample application=new JAXPSample();
application.printBooks();
application.addBook();
application.printBooks();
}
}
books.xml如下;
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book author="tom" email="tom@press.com">
<title>The World is Round</title>
<description>Is the world flat?No!The world is round.</description>
</book>
<book author="john" email="john@press.com">
<title>Make yourself Clever</title>
<description>In this book,john will teach you how to make yourself smart!</description>
</book>
</books>
这是一条镜像帖。来源:北邮人论坛 / java / #12488同步于 2009/11/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
请教一个JAXP问题
zuoziji
2009/11/30镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复