-
DOM4J 解析 xml 文件步驟
1、創(chuàng)建一個(gè) SAXReader 對(duì)象
????SAXReader saxReader = new SAXReader();
2、將 xml 文件加載到 SAXReader 中,并獲取 document 對(duì)象
????Document document = saxReader.read(fileName);
3、通過(guò) getRootElement() 獲取根節(jié)點(diǎn)元素
????Element employeeRoot = document.getRootElement();
4、通過(guò) elementIterator() 獲取子節(jié)點(diǎn)元素,返回 Iterator 返回迭代器
????Iterator eles = eleRoot.elementIterator();
5、通過(guò) while 遍歷迭代器
????while(eles.hasNest()){
????Element ele = (Element)eles.next();}
6、獲取屬性節(jié)點(diǎn)類似 JDOM 解析
????List<Attribute> attrs = ele.attributes();
7、獲取元素節(jié)點(diǎn)名、值
????ele.getName() ele.getStringValue()/ele.getText()
8、獲取屬性節(jié)點(diǎn)名、值
????ele.getName() ele.geValue()查看全部 -
導(dǎo)入jar包的兩種方式:
1.通過(guò)右鍵項(xiàng)目,選擇build Path下的Add External Archives導(dǎo)入系統(tǒng)任意路徑下的jar包。但是這種方式并沒(méi)有將jar包真正導(dǎo)入項(xiàng)目中,一旦遷移,則會(huì)丟失
2.通過(guò)右鍵項(xiàng)目,新建lib文件夾,直接將jar包拷貝到lib文件夾下,然后再通過(guò)build Path將jar包導(dǎo)入進(jìn)來(lái)查看全部 -
在JDOM中存儲(chǔ)對(duì)象
1.創(chuàng)建一個(gè)新的book類并將其實(shí)例化
Book bookEntity = new Book();
2.添加節(jié)點(diǎn)屬性值到book
if(attrName.equals("id")){
personEntity.setId(attrValue);
}
3.添加子節(jié)點(diǎn)屬性值到book
if (child.getName().equals("name")) {
bookEntity.setName(child.getValue());
}
else if (child.getName().equals("author")) {
bookEntity.setAuthor(child.getValue());
}
else if (child.getName().equals("year")) {
bookEntity.setYear(child.getValue());
}
else if (child.getName().equals("price")) {
bookEntity.setPrice(child.getValue());
}
else if (child.getName().equals("language")) {
bookEntity.setLanguage(child.getValue());
}查看全部 -
JDOM 解析時(shí)亂碼的處理步驟:
1)修改xml文件的編碼
2)將InputStream封裝為一個(gè)InputStreamReader,并在InputStreamReader的構(gòu)造函數(shù)中指定正確的編碼,然后將InputStreamReader傳入到SAXBuilder中就可以處理中文亂碼了
利用代碼問(wèn)題解決局部亂碼問(wèn)題(需要利用InputStreamReader來(lái)解決)
(1)InputStream in=new FIleStream("book.xml");
(2)InputStreamReader isr = new InputStreamReader(in, "utf-8");
(3)Document document = saxBuilder.build(isr);查看全部 -
DOM 解析
獲取節(jié)點(diǎn)名、值:getNodeName() getNodeValue() getTextContent()
獲取子節(jié)點(diǎn):getChildNodes() 返回 NodeList
獲取屬性節(jié)點(diǎn):getAttributes() 返回 NamedNodeMap
JDOM 解析
獲取節(jié)點(diǎn)名、值:getName() getValue()
獲取子節(jié)點(diǎn):getChildren() 返回 List<Element>
獲取屬性節(jié)點(diǎn):getAttributes() 返回 List<Attribute>查看全部 -
//繼續(xù)進(jìn)行解析 for?(Element?book?:?bookList)?{ ?System.out.println("===開(kāi)始解析第"+(bookList.indexOf(book)+1)+"本書(shū)==="); ?//解析book的屬性 ?List<Attribute>?attrList?=?book.getAttributes(); //????//知道節(jié)點(diǎn)下屬性名稱時(shí),獲取節(jié)點(diǎn)值 //????book.getAttributeValue("id"); ?//遍歷attrList(針對(duì)不清楚book節(jié)點(diǎn)下屬性的名字和數(shù)量) ?for?(Attribute?attr?:?attrList)?{ ??//遍歷屬性名 ??String?attrName?=?attr.getName(); ??//遍歷屬性值 ??String?attrValue?=?attr.getValue(); ??System.out.println("屬性名:"+attrName+"---屬性值:"+attrValue); ?} ?System.out.println("===結(jié)束解析第"+(bookList.indexOf(book)+1)+"本書(shū)==="); }
查看全部 -
JDOM的解析步驟
1.獲取SAXBuilder對(duì)象
2.將文件加載到SAXBuilder中,并獲取Document對(duì)象
3.通過(guò)Document對(duì)象獲取文件的根節(jié)點(diǎn)
4.有了根節(jié)點(diǎn),通過(guò)根節(jié)點(diǎn)獲取它的孩子節(jié)點(diǎn)書(shū)的集合
5.循環(huán)遍歷孩子節(jié)點(diǎn)集合,通過(guò)getAttributes方法獲取節(jié)點(diǎn)的屬性Attribute集合
6.通過(guò)attribute的getName和getValue方法分別獲取屬性的名稱和值
7.獲得book下的節(jié)點(diǎn),通過(guò)book節(jié)點(diǎn)對(duì)象的getChildren()方法獲取子節(jié)點(diǎn)的集合
8.再通過(guò)子節(jié)點(diǎn)的getName和getValue方法獲取節(jié)點(diǎn)名和節(jié)點(diǎn)的值查看全部 -
JDOM解析文件步驟
準(zhǔn)備:導(dǎo)入jar包
1.創(chuàng)建一個(gè)SAXBuilder對(duì)象
????SAXBuilder saxbuilder=newSAXBuilder();
2.創(chuàng)建輸入流,將xml文件加載到輸入流中
????Inputstream in=new FileInputstream("xxx.xml");
3.通過(guò)SAXBuilder的Build方法將輸入流加載到saxb中獲取dom對(duì)象
????Document doc = saxbuilder.build(in);
4.通過(guò)document對(duì)象獲取xml文件的根結(jié)點(diǎn)
????Element rootElement =doc.getRootElement();
5.獲取根結(jié)點(diǎn)下的子節(jié)點(diǎn)的List集合
JDOM 開(kāi)始解析前的準(zhǔn)備工作//進(jìn)行對(duì)books.xml文件的JDOM解析 //準(zhǔn)備工作 //1.創(chuàng)建一個(gè)SAXBuilder的對(duì)象 SAXBuilder?saxBuilder?=?new?SAXBuilder(); InputStream?in; try?{ ?//2.創(chuàng)建一個(gè)輸入流,將xml文件加載到輸入流中來(lái) ?in?=?new?FileInputStream("books.xml"); ?//3.通過(guò)saxBuilder的build方法,將輸入流加載到saxBuilder中 ?Document?document?=?saxBuilder.build(in); ?//4.通過(guò)document對(duì)象獲取xml文件的根節(jié)點(diǎn) ?Element?rootElement?=?document.getRootElement(); ?//5.獲取根節(jié)點(diǎn)下的子節(jié)點(diǎn)的List集合 ?List<Element>?bookList?=?rootElement.getChildren(); }?catch?(FileNotFoundException?e)?{ ?e.printStackTrace(); }?catch?(JDOMException?e)?{ ?e.printStackTrace(); }?catch?(IOException?e)?{ ?e.printStackTrace(); }
查看全部 -
xml的SAX解析并將解析的內(nèi)容及xml結(jié)構(gòu)形式保存至Java對(duì)象中。
SAX解析:
1、獲取一個(gè)SAXParserFactory的實(shí)例:SAXParserFactory factory = SAXParserFactory.newInstance();
2、通過(guò)factory獲取SAXParser實(shí)例:SAXParser parser = factory.newSAXParser();
3、創(chuàng)建SAXParserHandler對(duì)象:SAXParserHandler handler = new SAXParserHandler();
4、將xml文件和解析方式handler加載到SAXParser實(shí)例:parser.parse("books.xml",handler);
解析的時(shí)候,是startElement-characters-endElement , characters解析完一個(gè)屬性,就到endElement,然后又解析一個(gè)屬性又到endElement,最后解析完全部屬性,到endElement又到startElement開(kāi)始下一個(gè)節(jié)點(diǎn)。
ArrayList保存對(duì)象 ArrayList<Book> BookList=new ArrayList<Book>();
BookList.add(book);book=null;后繼續(xù)遍歷
public void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException// qName是String類型節(jié)點(diǎn)名稱;attributes是Attributes類型的實(shí)例,屬性的意思;查看全部 -
/** ??*?獲取節(jié)點(diǎn)值 ??*/ ?@Override ?public?void?characters(char[]?ch,?int?start,?int?length)?throws?SAXException?{ ??super.characters(ch,?start,?length); ??String?value?=?new?String(ch,?start,?length); ??if(!value.trim().equals("")){ ???System.out.println("節(jié)點(diǎn)值:"+value); ??} ?}
查看全部 -
?/** ??*?用來(lái)遍歷xml文件的開(kāi)始標(biāo)簽 ??*/ ?@Override ?public?void?startElement(String?uri,?String?localName,?String?qName,?Attributes?attributes)?throws?SAXException?{ ??//調(diào)用DefaultHandler類的startElement()方法 ??super.startElement(uri,?localName,?qName,?attributes); ??//開(kāi)始解析book元素的屬性 ??if(qName.equals("book")){ //???//已知book元素下屬性的名稱,根據(jù)屬性名稱獲取屬性值 //???String?value?=?attributes.getValue("id"); //???System.out.println("book的屬性值是:"+value); ???//不知道book元素下屬性的名稱以及個(gè)數(shù),如何獲取屬性名以及屬性值 ???int?num?=?attributes.getLength(); ???for(int?i=0;i<num;i++){ ????System.out.print("book元素的第"+(i+1)+"個(gè)屬性名:"+attributes.getQName(i)); ????System.out.println("--屬性值:"+attributes.getValue(i)); ???} ??} ?}
查看全部 -
DOM:全部讀取先
SAX解析:通過(guò)handler處理類逐個(gè)分析每個(gè)節(jié)點(diǎn),從外到內(nèi)逐個(gè)解析。。一個(gè)一個(gè)來(lái)
startElement, endElement(開(kāi)始標(biāo)簽解析,結(jié)束標(biāo)簽解析)
步驟:
1.通過(guò)SAXParserFactory的靜態(tài)newInstance()方法獲取SAXParserFactory實(shí)例factory
SAXParserFactory factory = SAXParserFactory.newInstance();
2.通過(guò)SAXParserFactory實(shí)例的newSAXParser()方法返回SAXParser實(shí)例parser
SAXParser parser = factory.newSAXParser();
parser.parse("路徑",handler類型對(duì)象);(需創(chuàng)建見(jiàn)3)
3.創(chuàng)建一個(gè)類繼承DefaultHandler,重寫(xiě)其中一些方法進(jìn)行業(yè)務(wù)處理并創(chuàng)建這個(gè)類的實(shí)例handler
創(chuàng)建一個(gè)package繼承DefaultHandler(。com那個(gè))
startElement()
用于遍歷xml的開(kāi)始標(biāo)簽
endElement()
遍歷xml結(jié)束標(biāo)簽
startElement
解析開(kāi)始
endElement
解析結(jié)束
SAX解析xml步驟
1.通過(guò)SAXParseFactory的靜態(tài)newInstance()方法獲取SAXParserFactory實(shí)例factory
2.通過(guò)SAXParserFactory實(shí)例的newSAXParser()方法返回SAXParser實(shí)例parser
3.創(chuàng)建一個(gè)類繼承DefaultHandle,重寫(xiě)方發(fā)進(jìn)行業(yè)務(wù)已處理創(chuàng)建這個(gè)類的實(shí)例handle查看全部 -
SAX解析原理
查看全部 -
DOM解析XML文件的節(jié)點(diǎn)名與節(jié)點(diǎn)值
//解析book節(jié)點(diǎn)的子節(jié)點(diǎn) NodeList?childNodes?=?book.getChildNodes(); //遍歷childNodes獲取每個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)名和節(jié)點(diǎn)值 System.out.println("第"+(i+1)+"本書(shū)共有"+childNodes.getLength()+"個(gè)子節(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)+"個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)名:"+childNodes.item(k).getNodeName()); ??//獲取element類型節(jié)點(diǎn)的節(jié)點(diǎn)值 ??//getFirstChild().getNodeValue()方法把第一個(gè)子節(jié)點(diǎn)的節(jié)點(diǎn)值輸出 ??//System.out.println("--節(jié)點(diǎn)值是"+childNodes.item(k).getFirstChild().getNodeValue()); ??//getTextContent()方法把element類型的node中的文本全部輸出 ??System.out.println("--節(jié)點(diǎn)值:"+childNodes.item(k).getTextContent()); ?} }
查看全部 -
DOM解析XML文件的屬性名和屬性值
??//創(chuàng)建一個(gè)DocumentBuilderFactory的對(duì)象 ??DocumentBuilderFactory?dbf?=?DocumentBuilderFactory.newInstance(); ?? ??//創(chuàng)建一個(gè)DocumentBuilder的對(duì)象 ??try?{ ???//創(chuàng)建DocumentBuilder對(duì)象 ???DocumentBuilder?db?=?dbf.newDocumentBuilder(); ???//通過(guò)DocumentBuilder對(duì)象的parser方法加載books.xml文件到當(dāng)前項(xiàng)目下 ???Document?document?=?db.parse("books.xml"); ???//獲取所有book節(jié)點(diǎn)的集合 ???NodeList?bookList?=?document.getElementsByTagName("book"); ???//通過(guò)NodeList的getLength()方法獲取bookList的長(zhǎng)度 ???System.out.println("一共有"+bookList.getLength()+"本書(shū)"); ???//遍歷每一個(gè)book節(jié)點(diǎn) ???for(int?i=0;i<bookList.getLength();i++){ ????//前提:不知道屬性名和屬性個(gè)數(shù) //????//通過(guò)item(i)方法獲取一個(gè)book節(jié)點(diǎn),NodeList的索引值從0開(kāi)始 //????Node?book?=?bookList.item(i); //????//獲取book節(jié)點(diǎn)的所有屬性集合 //????NamedNodeMap?attrs?=?book.getAttributes(); //????System.out.println("第"+(i+1)+"本書(shū)共有"+attrs.getLength()+"個(gè)屬性"); //????//遍歷book的屬性 //????for(int?j=0;j<attrs.getLength();j++){ //?????//通過(guò)item(index)方法獲取book節(jié)點(diǎn)的某一個(gè)屬性 //?????Node?attr?=?attrs.item(j); //?????//獲取屬性名 //?????System.out.print("屬性名:"+attr.getNodeName()); //?????//獲取屬性值 //?????System.out.println("--屬性值:"+attr.getNodeValue()); //????} ???? ????//前提:已經(jīng)知道book節(jié)點(diǎn)有且只能有1個(gè)id屬性 ????//將book節(jié)點(diǎn)進(jìn)行強(qiáng)制類型轉(zhuǎn)換,轉(zhuǎn)換成Element類型 ????Element?book?=?(Element)bookList.item(i); ????//通過(guò)getAttribute("id")方法獲取屬性值 ????String?attrValue?=?book.getAttribute("id"); ????System.out.println("id屬性的屬性值為"+attrValue); ???? ???} ??}?catch?(ParserConfigurationException?e)?{ ???e.printStackTrace(); ??}?catch?(SAXException?e)?{ ???e.printStackTrace(); ??}?catch?(IOException?e)?{ ???e.printStackTrace(); ??}
查看全部
舉報(bào)