XML解析和寫(xiě)入

DOM解析準(zhǔn)備工作

??

??

---------------------------------------------------->

DocumentBuilderFactory.newInstance創(chuàng)建對(duì)象

DocumentBuilder創(chuàng)建對(duì)象

Document? .parse("文件名”)進(jìn)行xml解析

NodeList? .getElementsByTagName("節(jié)點(diǎn)名“)? 找節(jié)點(diǎn)

for循環(huán)實(shí)現(xiàn)? ? ----->>>? ? Node? ? .item(i)? 遍歷獲取各屬性插勤。

??

常用節(jié)點(diǎn)類(lèi)型

??

解析xml節(jié)點(diǎn)名和節(jié)點(diǎn)值

----------------》》》》》

NodeList? .getChildNodes()? 獲取所有屬性的子節(jié)點(diǎn)

通過(guò) 子節(jié)點(diǎn)實(shí)現(xiàn)? .getNodeType()? ? ==? Node.ELEMENT_NODE判斷類(lèi)型是否是空格铺然,換行類(lèi)型

子節(jié)點(diǎn)第一節(jié)點(diǎn)值輸出方式:? ? ? childNodes.item(k).getFirstChild().getNodeValue()

直接輸出子節(jié)點(diǎn)內(nèi)所有值方式:? childNodes.item(k).getTextContent()

??

SAX解析XML

步驟:

??

??

??

------------------》》》》》》

??

----------------》》》》》》

??

----------------》》》》》》

使用SAX解析將XML的內(nèi)容和結(jié)果保存到JAVA中

=====》》》》創(chuàng)建全局的value和book對(duì)象

=====》》》》用集合AarryList來(lái)存儲(chǔ)book對(duì)象

??

=====》》》》startElement開(kāi)始后就創(chuàng)建新的book對(duì)象

??

====》》》》endElement后將book存進(jìn)集合中儲(chǔ)存硫戈,再將book對(duì)象清空

====》》》》依次判斷qName是否是需要的節(jié)點(diǎn)名稱(chēng)致开,進(jìn)行book屬性賦值

??

====》》》》在characters中用value 接收所有的節(jié)點(diǎn)值杠园,如果節(jié)點(diǎn)值不為空格或者換行就輸出

??

JDOM開(kāi)始解析前的準(zhǔn)備工作

====》》》》先導(dǎo)入JDOM的jar包

====》》》》創(chuàng)建SAXBuilder對(duì)象

====》》》》InputStream將xml文件寫(xiě)入

??

====》》》》saxBuilder的build方法加載輸入流

====》》》》用Document獲取輸入流

====》》》》Element的getRootElement()獲取根節(jié)點(diǎn)

====》》》》用List接收根節(jié)點(diǎn)的子節(jié)點(diǎn):.getChildren()

??

====》》》》繼續(xù)解析,遍歷輸出bookList里每個(gè)bool屬性的位置(也就是第幾本)

??

====》》》》用List來(lái)接收每個(gè)屬性的屬性值? .getAttributes()

====》》》》遍歷輸出屬性名和屬性值

??

====》》》》對(duì)屬性的子節(jié)點(diǎn)進(jìn)行遍歷獲取子節(jié)點(diǎn)名和子節(jié)點(diǎn)值? 節(jié)點(diǎn).getChildren()

??

===》》? 》》? ? JDOM 解析時(shí)亂碼的處理

1. encoding改為UTF-8

2.====>>>> 調(diào)用InputStreamrReader的切換編碼解析方法

??

====》》》》 在JDOM中儲(chǔ)存Book對(duì)象

====》》》》先創(chuàng)建集合為Book類(lèi)型慕淡,并為全局私有

??

====》》》》獲取所有子節(jié)點(diǎn)信息以后盾沫,采用集合add()方法添加到總集合中,之后釋放對(duì)象內(nèi)存闯传,便于下一次循環(huán)時(shí)使用谨朝。

??

====》》》》 關(guān)于JDOM使用過(guò)程中JAR包的引用(導(dǎo)出)

①先在本project中創(chuàng)建一個(gè)folder文件,然后把jar包放在該folder里面

②然后再該project中buid path --->>>? configure build path中

③選擇右方的的Add JARS? 甥绿,選擇該jar包并ok

應(yīng)用DOM4J解析節(jié)點(diǎn)的屬性

====》》》》 如JDOM解析一樣導(dǎo)入相應(yīng)的jar包

====》》》》創(chuàng)建SAXReader的對(duì)象

====》》》》通過(guò)該對(duì)象的read()方法加載xml文件字币,并用Document獲取

====》》》》用Element的 .getRootElement()獲取根節(jié)點(diǎn)

====》》》》再對(duì)象 .elementIterator()獲取迭代器

??

====》》》》用while(it.hasNext())來(lái)進(jìn)行遍歷

====》》》》將it.next()轉(zhuǎn)換為Element類(lèi)型

====》》》》用集合來(lái)獲得節(jié)點(diǎn)屬性

====》》》》再用foreach輸出節(jié)點(diǎn)名和節(jié)點(diǎn)值

??

====》》》》用迭代器來(lái)接收屬性節(jié)點(diǎn)的子節(jié)點(diǎn)? .elementIterator()

====》》》》再用while(itt.hasNext())進(jìn)行遍歷

====》》》》再用Element強(qiáng)制轉(zhuǎn)換類(lèi)型

====》》》》輸出子節(jié)點(diǎn)名和子節(jié)點(diǎn)值

??

四種解析方式的分析

??

DOM解析

??

SAX解析

??

JDOM和DOM4J解析

??

XML文件寫(xiě)入

DOM寫(xiě)入

====》》》》創(chuàng)建一個(gè)類(lèi)便于獲得DocumentBuilder對(duì)象

??

====》》》》創(chuàng)建createXML()類(lèi)來(lái)新建XML文件的各個(gè)節(jié)點(diǎn)

??

====》》》》緊接著創(chuàng)建TransformerFactory對(duì)象? .newInstance()方法

====》》》》創(chuàng)建Transformer對(duì)象? .newTransformer()

====》》》》此對(duì)象調(diào)用transform()方法,new DOMSource(document)共缕,newStreamResult(new File(XML文件名))? ? 創(chuàng)建此XML文件

??

====》》》》讓XML文件中節(jié)點(diǎn)換行? 對(duì)象.setOutputProperty(OutputKeys.INDENT,"yes") 完成換行縮進(jìn)

??

====》》》》需要在創(chuàng)建節(jié)點(diǎn)前將standalone設(shè)置為true(設(shè)置后在XML文件中就不會(huì)顯示了)

====》》》》向book節(jié)點(diǎn)創(chuàng)建子節(jié)點(diǎn) 用 book.appendChild(name) 添加子節(jié)點(diǎn)

====》》》》設(shè)置子節(jié)點(diǎn)的文本內(nèi)容:? ? 子節(jié)點(diǎn).setTextContent(“文本內(nèi)容”)

??

SAX生成XML文件

====》》》》創(chuàng)建 ArrayList<>返回值類(lèi)型的parseXML()方法纬朝,用于創(chuàng)建對(duì)象

??

====》》》》創(chuàng)建createXML()方法,創(chuàng)建一個(gè)集合對(duì)象

??

====》》》》用 SAXTransformerFactory 創(chuàng)建對(duì)象tff

====》》》》再用TransformerHandler 創(chuàng)建 handler 對(duì)象 tff.newTransformerHandler()?

??

====》》》》通過(guò)handler對(duì)象 .getTransformer()? 創(chuàng)建一個(gè) Transformer對(duì)象

====》》》》通過(guò)該Transformer對(duì)象設(shè)置XML編碼和換行縮進(jìn)? ? tr.setOutputProperty(OutputKeys.屬性骄呼,“設(shè)置的值”)

??

在設(shè)置ENCODING和INDENT時(shí)要放在設(shè)置Result之前

====》》》》創(chuàng)建一個(gè)File對(duì)象? 再new StreamResult 為 Result對(duì)象

====》》》》在創(chuàng)建File文件時(shí)需要判斷共苛,如果f不存在則要?jiǎng)?chuàng)建這個(gè)文件

====》》》》將handler對(duì)象與Result對(duì)象關(guān)聯(lián)起來(lái)

??

====》》》》利用handler對(duì)象進(jìn)行XML文件的內(nèi)容編寫(xiě)

====》》》》先startDocument()開(kāi)始文本編輯

====》》》》用AttributesImple new 一個(gè) attribute對(duì)象

====》》》》再.startElement開(kāi)始加入標(biāo)簽,記得寫(xiě)完后要.endElement結(jié)束標(biāo)簽

====》》》》寫(xiě)完后關(guān)閉document

??

====》》》》向bookstore里面添加屬性內(nèi)容蜓萄,用過(guò)addAttribute添加? ? 要開(kāi)始和結(jié)束該標(biāo)簽

??

====》》》》生成文本子節(jié)點(diǎn)隅茎,用foreach循環(huán)

====》》》》每添加不同的attr進(jìn)入不同的節(jié)點(diǎn)的時(shí)候要先 .clear()? 清空它的值

====》》》》然后用handler.characters來(lái)添加各個(gè)子節(jié)點(diǎn)屬性的值

??

??

====》》》》由于不同屬性下的子節(jié)點(diǎn)不同,所以增加每一個(gè)子節(jié)點(diǎn)判斷機(jī)制

??

RSS

簡(jiǎn)易信息聚合(也叫聚合內(nèi)容)是一種RSS基于XML標(biāo)準(zhǔn)嫉沽,在互聯(lián)網(wǎng)上被廣泛采用的內(nèi)容包裝和投遞協(xié)議辟犀。RSS(Really Simple Syndication)是一種描述和同步網(wǎng)站內(nèi)容的格式,是使用最廣泛的XML應(yīng)用绸硕。

RSS目前廣泛用于網(wǎng)上新聞?lì)l道堂竟,blog和wiki,主要的版本有0.91, 1.0, 2.0玻佩。使用RSS訂閱能更快地獲取信息出嘹,網(wǎng)站提供RSS輸出,有利于讓用戶獲取網(wǎng)站內(nèi)容的最新更新咬崔。

??

利用DOM4j實(shí)現(xiàn)寫(xiě)入RSS的xml文件

??

====》》》》需要?jiǎng)?chuàng)建文件

??

====》》》》用Element創(chuàng)建子節(jié)點(diǎn)? addElement()添加

====》》》》用.setText()設(shè)置子節(jié)點(diǎn)文本內(nèi)容

====》》》》用OutputFormat.createPrettyPrint()設(shè)置文本的完美格式? 將對(duì)象插入到writer中

??

=====》》》》可以在OutputFormat對(duì)象中設(shè)置編碼格式

??

====》》》》關(guān)于轉(zhuǎn)義字符税稼,? .setEscapeText()? false? 就不會(huì)自動(dòng)轉(zhuǎn)義了烦秩,可以直接添加‘<’ '>'一類(lèi)字符了

??

用JDOM生成XML根節(jié)點(diǎn)

====》》》》先Element一個(gè)根節(jié)點(diǎn)

====》》》》.setAttribute 為節(jié)點(diǎn)添加屬性

====》》》》Document一個(gè)對(duì)象,XMLOutputter一個(gè)XML輸出對(duì)象

??

====》》》》.output()輸出document對(duì)象和創(chuàng)建的文件對(duì)象

??

====》》》》添加子節(jié)點(diǎn)和子節(jié)點(diǎn)內(nèi)容

??

====》》》》同樣的郎仆,想要設(shè)置格式? 用Format? 的? .getCompactFormat()創(chuàng)建格式化對(duì)象

====》》》》用format對(duì)象設(shè)置想要格式化的內(nèi)容? 例如縮進(jìn):format.setIndent("")

??

生成XML四種方式的對(duì)比

??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末只祠,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子扰肌,更是在濱河造成了極大的恐慌抛寝,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件曙旭,死亡現(xiàn)場(chǎng)離奇詭異墩剖,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)夷狰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)岭皂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人沼头,你說(shuō)我怎么就攤上這事爷绘。” “怎么了进倍?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵土至,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我猾昆,道長(zhǎng)陶因,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任垂蜗,我火速辦了婚禮楷扬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贴见。我一直安慰自己烘苹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布片部。 她就那樣靜靜地躺著镣衡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪档悠。 梳的紋絲不亂的頭發(fā)上廊鸥,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音辖所,去河邊找鬼惰说。 笑死,一個(gè)胖子當(dāng)著我的面吹牛奴烙,可吹牛的內(nèi)容都是我干的助被。 我是一名探鬼主播剖张,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼切诀,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼揩环!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起幅虑,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤丰滑,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后倒庵,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體褒墨,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年擎宝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了郁妈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绍申,死狀恐怖噩咪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情极阅,我是刑警寧澤胃碾,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站筋搏,受9級(jí)特大地震影響仆百,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜奔脐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一俄周、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧髓迎,春花似錦栈源、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至涣雕,卻和暖如春钢颂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背票编。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工妄迁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人兑障。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓侄非,卻偏偏與公主長(zhǎng)得像蕉汪,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子逞怨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354