導入老師的課件,一個字沒改,運行時出現各種異常,看不懂啊,求大神。
這是老師的代碼,是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)?{ //創建一個DocumentBuilderFactory的對象 DocumentBuilderFactory?dbf?=?DocumentBuilderFactory.newInstance(); //創建一個DocumentBuilder的對象 try?{ //創建DocumentBuilder對象 DocumentBuilder?db?=?dbf.newDocumentBuilder(); //通過DocumentBuilder對象的parser方法加載books.xml文件到當前項目下 Document?document?=?db.parse("books.xml"); //獲取所有book節點的集合 NodeList?bookList?=?document.getElementsByTagName("book"); //通過nodelist的getLength()方法可以獲取bookList的長度 System.out.println("一共有"?+?bookList.getLength()?+?"本書"); //遍歷每一個book節點 for?(int?i?=?0;?i?<?bookList.getLength();?i++)?{ System.out.println("=================下面開始遍歷第"?+?(i?+?1)?+?"本書的內容================="); //通過?item(i)方法?獲取一個book節點,nodelist的索引值從0開始 Node?book?=?bookList.item(i); // 獲取book節點的所有屬性集合 NamedNodeMap?attrs?=?book.getAttributes(); System.out.println("第?"?+?(i?+?1)?+?"本書共有"?+?attrs.getLength()?+?"個屬性"); // 遍歷book的屬性 for?(int?j?=?0;?j?<?attrs.getLength();?j++)?{ //通過item(index)方法獲取book節點的某一個屬性 Node?attr?=?attrs.item(j); //獲取屬性名 System.out.print("屬性名:"?+?attr.getNodeName()); //獲取屬性值 System.out.println("--屬性值"?+?attr.getNodeValue()); } // //前提:已經知道book節點有且只能有1個id屬性 // //將book節點進行強制類型轉換,轉換成Element類型 // Element?book?=?(Element)?bookList.item(i); // //通過getAttribute("id")方法獲取屬性值 // String?attrValue?=?book.getAttribute("id"); // System.out.println("id屬性的屬性值為"?+?attrValue); //解析book節點的子節點 NodeList?childNodes?=?book.getChildNodes(); //遍歷childNodes獲取每個節點的節點名和節點值 System.out.println("第"?+?(i+1)?+?"本書共有"?+? childNodes.getLength()?+?"個子節點"); for?(int?k?=?0;?k?<?childNodes.getLength();?k++)?{ //區分出text類型的node以及element類型的node if?(childNodes.item(k).getNodeType()?==?Node.ELEMENT_NODE)?{ //獲取了element類型節點的節點名 System.out.print("第"?+?(k?+?1)?+?"個節點的節點名:"? +?childNodes.item(k).getNodeName()); // 獲取了element類型節點的節點值 System.out.println("--節點值是:"?+?childNodes.item(k).getFirstChild().getNodeValue()); // System.out.println("--節點值是:"?+?childNodes.item(k).getTextContent()); } } System.out.println("======================結束遍歷第"?+?(i?+?1)?+?"本書的內容================="); } }?catch?(ParserConfigurationException?e)?{ e.printStackTrace(); }??catch?(SAXException?e)?{ e.printStackTrace(); }?catch?(IOException?e)?{ e.printStackTrace(); } } } 解析的文件內容是<?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>
報錯信息:
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 1 字節的 UTF-8 序列的字節 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就能用了