課程
/后端開發
/Java
/Java眼中的XML 文件寫入
大家沒發現生成的第一個book節點沒有結束標記</book>嗎?
怎么回事??
2016-04-13
源自:Java眼中的XML 文件寫入 3-3
正在回答
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(); ?} }
代碼的位置放置不對
估計是你的代碼漏了這一句:tfhandler.endElement("", "", "book");
舉報
舉例說明JAVA程序如何生成XML文檔,多種生成方式任你選擇
1 回答如何插入第二個book節點?
4 回答為什么生成不了book,name這些節點?執行后只有bookstore
1 回答節點的值為空值,生成的xml 沒有開始、結束節點 例如<name/>
2 回答求教,系統是如何辨別book是bookStore的子節點的?
5 回答換行但是沒有縮進。。。這個要怎么辦? 如何在已有的xml文件中,再加一個book子節點?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-09-02
代碼的位置放置不對
2016-04-13
估計是你的代碼漏了這一句:tfhandler.endElement("", "", "book");