package?com.imooc.jdomtest;
import?org.jdom2.Attribute;
import?org.jdom2.Document;
import?org.jdom2.Element;
import?org.jdom2.JDOMException;
import?org.jdom2.input.SAXBuilder;
import?java.io.*;
import?java.util.List;
/**
?*?Created?with?IntelliJ?IDEA.
?*?User:?QiuShiLe
?*?Date:?2015/3/26
?*?Time:?19:37
?*?Project:?XMLAnalyse
?*/
public?class?JDOMTest?{
????public?static?void?main(String[]?args)?{
????????//創(chuàng)建一個SAXBuilder對象
????????SAXBuilder?saxBuilder?=?new?SAXBuilder();
????????//創(chuàng)建一個輸入流?以加載xml
????????InputStream?in;
????????try?{
????????????in?=?new?FileInputStream("demo"?+?java.io.File.separator?+?"books.xml");
????????????InputStreamReader?isr?=?new?InputStreamReader(in,?"UTF-8");
????????????Document?document?=?saxBuilder.build(isr);
????????????//獲取根節(jié)點
????????????Element?rootElement?=?document.getRootElement();
????????????//獲取子節(jié)點的集合
????????????List<Element>?bookList?=?rootElement.getChildren();
????????????for?(Element?book?:?bookList)?{
????????????????System.out.println("===開始解析第"?+?(bookList.indexOf(book)?+?1)?+?"本書===");
????????????????//解析book的屬性
????????????????//book.getAttributeValue("id");?//知道名稱時獲取節(jié)點值
????????????????List<Attribute>?attrList?=?book.getAttributes();
????????????????for?(Attribute?attr?:?attrList)?{
????????????????????System.out.println(attr.getName());
????????????????????System.out.println(attr.getValue());
????????????????}
????????????????List<Element>?bookChilds?=?book.getChildren();
????????????????for?(Element?child?:?bookChilds)?{
????????????????????System.out.println("節(jié)點"?+?child.getName()?+?"的值為"?+?child.getValue());
????????????????}
//
//????????????????//對book的子節(jié)點及節(jié)點值遍歷
//????????????????for?(Element?child?:?book.getChildren())?{
//????????????????????System.out.println("節(jié)點?"?+?child.getName()?+?"?的值為?"?+?child.getValue());
//????????????????}
????????????????System.out.println("===結束解析第"?+?(bookList.indexOf(book)?+?1)?+?"本書===");
????????????}
????????}?catch?(FileNotFoundException?e)?{
????????????e.printStackTrace();
????????}?catch?(JDOMException?e)?{
????????????e.printStackTrace();
????????}?catch?(IOException?e)?{
????????????e.printStackTrace();
????????}
????}
}
"C:\Program?Files\Java\jdk1.8.0_20\bin\java"?-Didea.launcher.port=7535?"-Didea.launcher.bin.path=D:\Program?Files?(x86)\JetBrains\IntelliJ?IDEA?14.1\bin"?-Dfile.encoding=UTF-8?-classpath?"C:\Program?Files\Java\jdk1.8.0_20\jre\lib\charsets.jar;C:\Program?Files\Java\jdk1.8.0_20\jre\lib\deploy.jar;C:\Program?Files\Java\jdk1.8.0_20\jre\lib\javaws.jar;C:\Program?Files\Java\jdk1.8.0_20\jre\lib\jce.jar;C:\Program?Files\Java\jdk1.8.0_20\jre\lib\jfr.jar;C:\Program?Files\Java\jdk1.8.0_20\jre\lib\jfxswt.jar;C:\Program?Files\Java\jdk1.8.0_20\jre\lib\jsse.jar;C:\Program?Files\Java\jdk1.8.0_20\jre\lib\management-agent.jar;C:\Program?Files\Java\jdk1.8.0_20\jre\lib\plugin.jar;C:\Program?Files\Java\jdk1.8.0_20\jre\lib\resources.jar;C:\Program?Files\Java\jdk1.8.0_20\jre\lib\rt.jar;C:\Program?Files\Java\jdk1.8.0_20\jre\lib\ext\access-bridge-64.jar;C:\Program?Files\Java\jdk1.8.0_20\jre\lib\ext\cldrdata.jar;C:\Program?Files\Java\jdk1.8.0_20\jre\lib\ext\dnsns.jar;C:\Program?Files\Java\jdk1.8.0_20\jre\lib\ext\jaccess.jar;C:\Program?Files\Java\jdk1.8.0_20\jre\lib\ext\jfxrt.jar;C:\Program?Files\Java\jdk1.8.0_20\jre\lib\ext\localedata.jar;C:\Program?Files\Java\jdk1.8.0_20\jre\lib\ext\nashorn.jar;C:\Program?Files\Java\jdk1.8.0_20\jre\lib\ext\sunec.jar;C:\Program?Files\Java\jdk1.8.0_20\jre\lib\ext\sunjce_provider.jar;C:\Program?Files\Java\jdk1.8.0_20\jre\lib\ext\sunmscapi.jar;C:\Program?Files\Java\jdk1.8.0_20\jre\lib\ext\sunpkcs11.jar;C:\Program?Files\Java\jdk1.8.0_20\jre\lib\ext\zipfs.jar;D:\WorkStation\IntelliJ\XMLAnalyse\out\production\XMLAnalyse;D:\Downloads\jdom-2.0.6\jdom-2.0.6.jar;D:\Program?Files?(x86)\JetBrains\IntelliJ?IDEA?14.1\lib\idea_rt.jar"?com.intellij.rt.execution.application.AppMain?com.imooc.jdomtest.JDOMTest
org.jdom2.input.JDOMParseException:?Error?on?line?1:?前言中不允許有內容。
????at?org.jdom2.input.sax.SAXBuilderEngine.build(SAXBuilderEngine.java:232)
????at?org.jdom2.input.sax.SAXBuilderEngine.build(SAXBuilderEngine.java:303)
????at?org.jdom2.input.SAXBuilder.build(SAXBuilder.java:1196)
????at?com.imooc.jdomtest.JDOMTest.main(JDOMTest.java:30)
????at?sun.reflect.NativeMethodAccessorImpl.invoke0(Native?Method)
????at?sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
????at?sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
????at?java.lang.reflect.Method.invoke(Method.java:483)
????at?com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Caused?by:?org.xml.sax.SAXParseException;?lineNumber:?1;?columnNumber:?1;?前言中不允許有內容。
????at?com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203)
????at?com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177)
????at?com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:441)
????at?com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:368)
????at?com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1436)
????at?com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:999)
????at?com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
????at?com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:117)
????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.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
????at?com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:649)
????at?org.jdom2.input.sax.SAXBuilderEngine.build(SAXBuilderEngine.java:217)
????...?8?more
Process?finished?with?exit?code?0
2015-03-31
應該是編碼錯誤,你看下xml編碼是不是utf-8。因為識別不出XML,才會報前言不能有內容
2019-05-04
我也是出現(xiàn)了這個問題 修改了編碼就好了? 原本的編碼是 UTF-8 with BOM
2016-12-15
你使用Editor打開,將文件保存為無BOM頭的UTF-8格式,類似WINDOWS自帶的記事本等軟件,在保存一個以UTF-8編碼的文件時,會在文件開始的地方插入三個不可見的字符(0xEF 0xBB 0xBF,即BOM),這個應該就是指前沿中的內容,只要去掉就可以執(zhí)行了。
2016-12-15
你的xml文件出現(xiàn)錯誤了,<?xml>中間沒有空格,如果有空格的話會出現(xiàn)錯誤,如果是編碼問題的話,打印出來是亂碼,而不是這個錯誤。
2016-06-28
應該是讀取的xml文件包含BOM頭,我用Sublime打開 -> 文件 -> 保存編碼?-> UTF-8 就好了
2015-11-24
請問“前言不能有內容”這個問題你解決了嗎?,代碼和老師的一樣,但是還會報錯
2015-03-31
隔壁老邱你好,隔壁老邱再見!
2015-03-31
這是原圖