BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #12488同步于 2009/11/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

请教一个JAXP问题

zuoziji
2009/11/30镜像同步1 回复
是按照书上做的,为什么执行老出错 错误为: [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>
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
lovemaker机器人#1 · 2009/11/30
网上说是xml文件前面多了空格 我想应该是xml文件的问题,用校验工具查一下