導(dǎo)入老師的課件,一個字沒改,運(yùn)行時出現(xiàn)各種異常,看不懂啊,求大神。
這是老師的代碼,是xml的DOM用法 package?com.imooc.domtest.test; import?java.io.IOException; import?javax.xml.parsers.DocumentBuilder; import?javax.xml.parsers.DocumentBuilderFactory; import?javax.xml.parsers.ParserConfigurationException; import?org.w3c.dom.Document; import?org.w3c.dom.Element; import?org.w3c.dom.NamedNodeMap; import?org.w3c.dom.Node; import?org.w3c.dom.NodeList; import?org.xml.sax.SAXException; public?class?DOMTest?{ public?static?void?main(String[]?args)?{ //創(chuàng)建一個DocumentBuilderFactory的對象 DocumentBuilderFactory?dbf?=?DocumentBuilderFactory.newInstance(); //創(chuàng)建一個DocumentBuilder的對象 try?{ //創(chuàng)建DocumentBuilder對象 DocumentBuilder?db?=?dbf.newDocumentBuilder(); //通過DocumentBuilder對象的parser方法加載books.xml文件到當(dāng)前項(xiàng)目下 Document?document?=?db.parse("books.xml"); //獲取所有book節(jié)點(diǎn)的集合 NodeList?bookList?=?document.getElementsByTagName("book"); //通過nodelist的getLength()方法可以獲取bookList的長度 System.out.println("一共有"?+?bookList.getLength()?+?"本書"); //遍歷每一個book節(jié)點(diǎn) for?(int?i?=?0;?i?<?bookList.getLength();?i++)?{ System.out.println("=================下面開始遍歷第"?+?(i?+?1)?+?"本書的內(nèi)容================="); //通過?item(i)方法?獲取一個book節(jié)點(diǎn),nodelist的索引值從0開始 Node?book?=?bookList.item(i); // 獲取book節(jié)點(diǎn)的所有屬性集合 NamedNodeMap?attrs?=?book.getAttributes(); System.out.println("第?"?+?(i?+?1)?+?"本書共有"?+?attrs.getLength()?+?"個屬性"); // 遍歷book的屬性 for?(int?j?=?0;?j?<?attrs.getLength();?j++)?{ //通過item(index)方法獲取book節(jié)點(diǎn)的某一個屬性 Node?attr?=?attrs.item(j); //獲取屬性名 System.out.print("屬性名:"?+?attr.getNodeName()); //獲取屬性值 System.out.println("--屬性值"?+?attr.getNodeValue()); } // //前提:已經(jīng)知道book節(jié)點(diǎn)有且只能有1個id屬性 // //將book節(jié)點(diǎn)進(jìn)行強(qiáng)制類型轉(zhuǎn)換,轉(zhuǎn)換成Element類型 // Element?book?=?(Element)?bookList.item(i); // //通過getAttribute("id")方法獲取屬性值 // String?attrValue?=?book.getAttribute("id"); // System.out.println("id屬性的屬性值為"?+?attrValue); //解析book節(jié)點(diǎn)的子節(jié)點(diǎn) NodeList?childNodes?=?book.getChildNodes(); //遍歷childNodes獲取每個節(jié)點(diǎn)的節(jié)點(diǎn)名和節(jié)點(diǎn)值 System.out.println("第"?+?(i+1)?+?"本書共有"?+? childNodes.getLength()?+?"個子節(jié)點(diǎn)"); for?(int?k?=?0;?k?<?childNodes.getLength();?k++)?{ //區(qū)分出text類型的node以及element類型的node if?(childNodes.item(k).getNodeType()?==?Node.ELEMENT_NODE)?{ //獲取了element類型節(jié)點(diǎn)的節(jié)點(diǎn)名 System.out.print("第"?+?(k?+?1)?+?"個節(jié)點(diǎn)的節(jié)點(diǎn)名:"? +?childNodes.item(k).getNodeName()); // 獲取了element類型節(jié)點(diǎn)的節(jié)點(diǎn)值 System.out.println("--節(jié)點(diǎn)值是:"?+?childNodes.item(k).getFirstChild().getNodeValue()); // System.out.println("--節(jié)點(diǎn)值是:"?+?childNodes.item(k).getTextContent()); } } System.out.println("======================結(jié)束遍歷第"?+?(i?+?1)?+?"本書的內(nèi)容================="); } }?catch?(ParserConfigurationException?e)?{ e.printStackTrace(); }??catch?(SAXException?e)?{ e.printStackTrace(); }?catch?(IOException?e)?{ e.printStackTrace(); } } } 解析的文件內(nèi)容是<?xml?version="1.0"?encoding="UTF-8"?> <bookstore> ???????<book?id="1"> ????????????????<name>冰與火之歌</name> <author>喬治馬丁</author> <year>2014</year> <price>89</price> ???????</book> ???<book?id="2"> ???<name>安徒生童話</name> <year>2004</year> <price>77</price> <language>English</language> </book> </bookstore>
報(bào)錯信息:
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 1 字節(jié)的 UTF-8 序列的字節(jié) 1 無效。
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(UTF8Reader.java:701)
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(UTF8Reader.java:567)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1793)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.peekChar(XMLEntityScanner.java:503)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2719)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at com.imooc.domtest.test.DOMTest.main(DOMTest.java:26)
2016-04-18
我大概知道了,下載老師的課件,我的電腦自動把xml文件保存為ANSI編碼的了,改回utf-8就能用了