-
SAX解析XML的速度比DOM的塊,
SAX的解析XML的解析器,需要重寫startElement()開始解析的方法and endElemaent()方法 結(jié)束解析的方法and characters()方法
重寫charaters()方法時,String(byte[] bytes,int offset,int length)的構(gòu)造方法進(jìn)行數(shù)組的傳遞
再去除解析時多余空格
if(!value.trim().equals("")){
System.out.println(value);
}
使用 SAX 解析 XML 文件的節(jié)點名和節(jié)點間文本
startElement方法——String qName(第三個參數(shù)):節(jié)點名
startElement方法——Attributes attributes(第四個參數(shù)):節(jié)點名的屬性操作
characters方法——char[] ch(第一個參數(shù)):xml整個文本內(nèi)容,所以需截取想要的內(nèi)容查看全部 -
SAX方式解析xml步驟
1.通過SAXParserFactory的靜態(tài)newInstance()方法獲取一個SAXParserFactory的對象。
2.通過SAXParserFactory對象的newSAXParser()方法返回一個SAXParser類的對象。
3.創(chuàng)建一個類繼承DefaultHandler,重寫其中的一些方法并創(chuàng)建類的實例.
4.通過SAXParser類的Parse(Stringname,df)方法解析xml文件,參數(shù)Stringname為路徑名,df為繼承于DefaultHandler類的實例化對象,不需要定義變量存儲返回的類型.
SAX是按節(jié)點順序進(jìn)行解析,遇到xml的聲明即開始解析,遇到最后一個節(jié)點的尾節(jié)點便結(jié)束解析,需要用戶自己定義一個類繼承于DefaultHandler類來解析,遇到開始標(biāo)簽節(jié)點便通過startElement開始解析節(jié)點,遇到結(jié)束標(biāo)簽節(jié)點便通過endElement結(jié)束解析,再遇到開始節(jié)點繼續(xù)通過startElement解析,一直循環(huán)直到xml文件最后的結(jié)束標(biāo)簽節(jié)點.
5.在繼承于DefaultHandler這個類中需要重寫父類的startElement()和endElement()方法,來進(jìn)行開始節(jié)點與結(jié)束節(jié)點的解析,再重寫startDocument()方法與endDocument()方法來標(biāo)識解析的開始與結(jié)束.查看全部 -
解析文件節(jié)點以及子節(jié)點的值
1.先獲取子節(jié)點,Node下有方法getChildNodes()來獲取某個節(jié)點的子節(jié)點的集合,返回NodeList類型.
NodeList childNodes=book.getChildNodes()//包含book節(jié)點所有的子節(jié)點,兩個標(biāo)簽之間的所有內(nèi)容都看成是子節(jié)點.
2.通過childNodes的getLength()方法返回字點的個數(shù)(空格與換行字符看成為一個文本節(jié)點,標(biāo)簽與結(jié)束標(biāo)簽看成一個元素節(jié)點)
3.通過NodeList的item(i)獲取指定位置子節(jié)點的名稱返回Node類型.再用Node類型的getNodeName()方法就可以獲取節(jié)點名
Node childnode=childNodes.item(i);
String name=childnode.getNodeName();
可以通過Node類的getNodeType()來區(qū)分文本類型的node以及元素類型的node,看當(dāng)前Node類型是否與Node."節(jié)點類型英文全稱"相同.
if(childnode.getNodeType==Node.ELEMENT_NODE)
{System.out.println(name)}
4.不能直接通過Node的getNodeValue()來獲取節(jié)點的值,因為元素節(jié)點的nodeValue的返回值為null而且標(biāo)簽之間的文本被看做是該標(biāo)簽的子節(jié)點.所以要用Node的getFirstChild()此時獲取的子節(jié)點為文本節(jié)點,Text節(jié)點類型的nodeValue返回值為節(jié)點內(nèi)容,再getNodeValue()。
或者直接用Node的getTextContent()方法直接獲取節(jié)點值。
如果該Node節(jié)點還存在其他子節(jié)點并且有節(jié)點值<name><a>廣州大學(xué)</a>華軟學(xué)院</name>,那么用getFirstChild().getNodeValue()一樣是null,因為獲取的子節(jié)點仍然是element類型的
如果用Node的getTextContent(),一樣會把<a>元素節(jié)點當(dāng)成是Content輸出。查看全部 -
獲取xml文件內(nèi)容的
四種解析方式:DOM SAX DOM4J JDOM
DOM、SAX :java 官方方式,不需要下載jar包
DOM4J、JDOM :第三方,需要網(wǎng)上下載jar包
DOM使用步驟:
準(zhǔn)備工作
1、創(chuàng)建一個DocumentBuilderFactory的對象
DocumentBuilderFactory dbf = DocumnetBuilderFactory.instance();
2、創(chuàng)建一個DocumentBuilder的對象
DocumentBuilder db = dbf.newDocumentBuilder();
3、通過DocumentBuilder對象的parse方法加載xml文件到當(dāng)前項目
Document document = db.parse("*.xml");查看全部 -
用xml來存儲信息,然后使用特定的程序來進(jìn)行進(jìn)行可視化,讓人們讀懂。
查看全部 -
暫時用不到,
講的個項目沒啥關(guān)系
查看全部 -
四種解析方式:
DOM
SAX
DOM4J
JDOM
查看全部 -
解析XML文件的目的:
獲取節(jié)點名、節(jié)點值、屬性名、屬性值。
查看全部 -
XML文件例子
注意:標(biāo)簽區(qū)分大小寫。
查看全部 -
node 節(jié)點有三種,
element表示當(dāng)前標(biāo)簽元素
attr表示當(dāng)前節(jié)點的屬性值
text 表示文本節(jié)點
去除text節(jié)點的一個辦法是
查看全部 -
遍歷XML文件的節(jié)點有兩種方法:
在不清楚當(dāng)前節(jié)點的屬性個數(shù)時使用 node接受nodelist中的一個node然后用NamedNodeMap 接受當(dāng)前節(jié)點的所有屬性 并以Map形式返回
查看全部 -
解析XML文件需要對象:
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumenbuilder();
//解析XML文件
db.parse(URI);
查看全部
舉報