站長資訊網
最全最豐富的資訊網站

dom4j讀取xml(筆記)

Java代碼 

1.   

2. SAXReader reader = new SAXReader();    

3. Document doc = reader.read(…);    

4. List childNodes = doc.selectNodes(“//Config/Child/ChildNode”);    

5. for(Object obj:childNodes) {    

6. Node childNode = (Node)obj;    

7.   

8. String name = childNode.valueOf(“@name”);    

9. String text = childNode.getText();    

10. }    

11.   

12.   

13.   

14. 一.Document對象相關   

15.   

16. 1.讀取XML文件,獲得document對象.   

17.              SAXReader reader = new SAXReader();   

18.              Document   document = reader.read(new File(“input.xml”));   

19.   

20. 2.解析XML形式的文本,得到document對象.   

21.              String text = “<members></members>”;   

22.              Document document = DocumentHelper.parseText(text);   

23. 3.主動創建document對象.   

24.              Document document = DocumentHelper.createDocument();   

25.              Element root = document.addElement(“members”);// 創建根節點   

26. 二.節點相關   

27.   

28. 1.獲取文檔的根節點.   

29. Element rootElm = document.getRootElement();   

30. 2.取得某節點的單個子節點.   

31. Element memberElm=root.element(“member”);// “member”是節點名   

32. 3.取得節點的文字   

33. String text=memberElm.getText();也可以用:   

34. String text=root.elementText(“name”);這個是取得根節點下的name字節點的文字.   

35.   

36. 4.取得某節點下名為”member”的所有字節點并進行遍歷.   

37. List nodes = rootElm.elements(“member”);   

38.   

39. for (Iterator it = nodes.iterator(); it.hasNext();) {   

40.     Element elm = (Element) it.next();   

41.    // do something   

42. }   

43. 5.對某節點下的所有子節點進行遍歷.   

44.             for(Iterator it=root.elementIterator();it.hasNext();){   

45.                  Element element = (Element) it.next();   

46.                 // do something   

47.              }   

48. 6.在某節點下添加子節點.   

49. Element ageElm = newMemberElm.addElement(“age”);   

50. 7.設置節點文字.   

51. ageElm.setText(“29”);   

52. 8.刪除某節點.   

53. parentElm.remove(childElm);// childElm是待刪除的節點,parentElm是其父節點   

54. 9.添加一個CDATA節點.   

55.          Element contentElm = infoElm.addElement(“content”);   

56.          contentElm.addCDATA(diary.getContent());   

57.   

58. 三.屬性相關.   

59. 1.取得某節點下的某屬性   

60.              Element root=document.getRootElement();       

61.              Attribute attribute=root.attribute(“size”);// 屬性名name   

62. 2.取得屬性的文字   

63.              String text=attribute.getText();也可以用:   

64. String text2=root.element(“name”).attributeValue(“firstname”);這個是取得根節點下name字節點的屬性firstname的值.   

65.   

66. 3.遍歷某節點的所有屬性   

67.              Element root=document.getRootElement();       

68.             for(Iterator it=root.attributeIterator();it.hasNext();){   

69.                  Attribute attribute = (Attribute) it.next();   

70.                  String text=attribute.getText();   

71.                  System.out.println(text);   

72.              }   

73. 4.設置某節點的屬性和文字.   

74. newMemberElm.addAttribute(“name”, “sitinspring”);   

75. 5.設置屬性的文字   

76.              Attribute attribute=root.attribute(“name”);   

77.              attribute.setText(“sitinspring”);   

78. 6.刪除某屬性   

79.              Attribute attribute=root.attribute(“size”);// 屬性名name   

80.              root.remove(attribute);   

81. 四.將文檔寫入XML文件.   

82. 1.文檔中全為英文,不設置編碼,直接寫入的形式.   

83. XMLWriter writer = new XMLWriter(new FileWriter(“output.xml”));   

84. writer.write(document);   

85. writer.close();   

86. 2.文檔中含有中文,設置編碼格式寫入的形式.   

87.              OutputFormat format = OutputFormat.createPrettyPrint();   

88.              format.setEncoding(“GBK”);    // 指定XML編碼           

89.              XMLWriter writer = new XMLWriter(new FileWriter(“output.xml”),format);   

90.                

91.              writer.write(document);   

92.              writer.close();   

93. 五.字符串與XML的轉換   

94. 1.將字符串轉化為XML   

95. String text = “<members> <member>sitinspring</member> </members>”;   

96. Document document = DocumentHelper.parseText(text);   

97. 2.將文檔或節點的XML轉化為字符串.   

98.              SAXReader reader = new SAXReader();   

99.              Document   document = reader.read(new File(“input.xml”));               

100.              Element root=document.getRootElement();                   

101.              String docXmlText=document.asXML();   

102.              String rootXmlText=root.asXML();   

103.              Element memberElm=root.element(“member”);   

104.              String memberXmlText=memberElm.asXML();   

105.   

106.   

107.   

108.   

109. dom4j API 包含一個解析 XML 文檔的工具。本文中將使用這個解析器創建一個示例 XML 文檔。清單 1 顯示了這個示例 XML 文檔,catalog.xml。   

110.   

111. 清單 1. 示例 XML 文檔(catalog.xml)    

112. <?xml version=”1.0″ encoding=”UTF-8″?>    

113. <catalog>    

114. <!–An XML Catalog–>    

115. <?target instruction?>   

116.   <journal title=”XML Zone”    

117.                   publisher=”IBM developerWorks”>    

118. <article level=”Intermediate” date=”December-2001″>   

119.  <title>Java configuration with XML Schema</title>    

120.  <author>    

121.      <firstname>Marcello</firstname>    

122.      <lastname>Vitaletti</lastname>    

123.  </author>   

124.   </article>   

125.   </journal>    

126. </catalog>   

127.     

128.   

129.   

130. 然后使用同一個解析器修改 catalog.xml,清單 2 是修改后的 XML 文檔,catalog-modified.xml。   

131.   

132. 清單 2. 修改后的 XML 文檔(catalog-modified.xml)    

133. <?xml version=”1.0″ encoding=”UTF-8″?>    

134. <catalog>    

135. <!–An XML catalog–>    

136. <?target instruction?>   

137.   <journal title=”XML Zone”  

138.                    publisher=”IBM developerWorks”>    

139. <article level=”Introductory” date=”October-2002″>   

140.  <title>Create flexible and extensible XML schemas</title>    

141.  <author>    

142.      <firstname>Ayesha</firstname>    

143.      <lastname>Malik</lastname>    

144.  </author>    

145.   </article>   

146.   </journal>    

147. </catalog>   

148.     

149.   

150.   

151. 與 W3C DOM API 相比,使用 dom4j 所包含的解析器的好處是 dom4j 擁有本地的 XPath 支持。DOM 解析器不支持使用 XPath 選擇節點。   

152.   

153. 本文包括以下幾個部分:   

154.   

155. 預先設置    

156. 創建文檔    

157. 修改文檔    

158. 預先設置   

159.   

160. 這個解析器可以從 http://dom4j.org 獲取。通過設置使 dom4j-1.4/dom4j-full.jar 能夠在 classpath 中訪問,該文件中包括 dom4j 類、XPath 引擎以及 SAX 和 DOM 接口。如果已經使用了 JAXP 解析器中包含的 SAX 和 DOM 接口,向 classpath 中增加 dom4j-1.4/dom4j.jar 。 dom4j.jar 包括 dom4j 類和 XPath 引擎,但是不含 SAX 與 DOM 接口。    

161.   

162.   

163.   

164.     

165.   

166.   

167.  回頁首    

168.     

169.   

170.   

171.   

172. 創建文檔   

173.   

174. 本節討論使用 dom4j API 創建 XML 文檔的過程,并創建示例 XML 文檔 catalog.xml。   

175.   

176. 使用 import 語句導入 dom4j API 類:   

177.   

178. import org.dom4j.Document;   

179. import org.dom4j.DocumentHelper;   

180. import org.dom4j.Element;   

181.     

182.   

183.   

184. 使用 DocumentHelper 類創建一個文檔實例。 DocumentHelper 是生成 XML 文檔節點的 dom4j API 工廠類。    

185.   

186.  Document document = DocumentHelper.createDocument();    

187.   

188.   

189. 使用 addElement() 方法創建根元素 catalog 。 addElement() 用于向 XML 文檔中增加元素。    

190.   

191. Element catalogElement = document.addElement(“catalog”);    

192.   

193.   

194. 在 catalog 元素中使用 addComment() 方法添加注釋“An XML catalog”。    

195.   

196.  catalogElement.addComment(“An XML catalog”);    

197.   

198.   

199. 在 catalog 元素中使用 addProcessingInstruction() 方法增加一個處理指令。    

200.   

201. catalogElement.addProcessingInstruction(“target”,”text”);    

202.   

203.   

204. 在 catalog 元素中使用 addElement() 方法增加 journal 元素。    

205.   

206. Element journalElement =  catalogElement.addElement(“journal”);    

207.   

208.   

209. 使用 addAttribute() 方法向 journal 元素添加 title 和 publisher 屬性。    

210.   

211. journalElement.addAttribute(“title”, “XML Zone”);   

212.          journalElement.addAttribute(“publisher”, “IBM developerWorks”);    

213.   

214.   

215. 向 article 元素中添加 journal 元素。    

216.   

217. Element articleElement=journalElement.addElement(“article”);    

218.   

219.   

220. 為 article 元素增加 level 和 date 屬性。    

221.   

222. articleElement.addAttribute(“level”, “Intermediate”);   

223.       articleElement.addAttribute(“date”, “December-2001”);    

224.   

225.   

226. 向 article 元素中增加 title 元素。    

227.   

228. Element titleElement=articleElement.addElement(“title”);    

229.   

230.   

231. 使用 setText() 方法設置 article 元素的文本。    

232.   

233. titleElement.setText(“Java configuration with XML Schema”);    

234.   

235.   

236. 在 article 元素中增加 author 元素。    

237.   

238. Element authorElement=articleElement.addElement(“author”);    

239.   

240.   

241. 在 author 元素中增加 firstname 元素并設置該元素的文本。    

242.   

243. Element  firstNameElement=authorElement.addElement(“firstname”);   

244.      firstNameElement.setText(“Marcello”);    

245.   

246.   

247. 在 author 元素中增加 lastname 元素并設置該元素的文本。    

248.   

249. Element lastNameElement=authorElement.addElement(“lastname”);   

250.      lastNameElement.setText(“Vitaletti”);    

251.   

252.   

253. 可以使用 addDocType() 方法添加文檔類型說明。    

254.   

255. document.addDocType(“catalog”, null,”file://c:/Dtds/catalog.dtd”);    

256.   

257.   

258. 這樣就向 XML 文檔中增加文檔類型說明:   

259.   

260. <!DOCTYPE catalog SYSTEM “file://c:/Dtds/catalog.dtd”>    

261.   

262.   

263. 如果文檔要使用文檔類型定義(DTD)文檔驗證則必須有 Doctype。   

264.   

265. XML 聲明 <?xml version=”1.0″ encoding=”UTF-8″?> 自動添加到 XML 文檔中。    

266.   

267. 清單 3 所示的例子程序 XmlDom4J.java 用于創建 XML 文檔 catalog.xml。   

268.   

269. 清單 3. 生成 XML 文檔 catalog.xml 的程序(XmlDom4J.java)    

270. import org.dom4j.Document;   

271. import org.dom4j.DocumentHelper;   

272. import org.dom4j.Element;   

273. import org.dom4j.io.XMLWriter;   

274. import java.io.*;   

275. public class XmlDom4J{   

276. public void generateDocument(){   

277. Document document = DocumentHelper.createDocument();   

278.      Element catalogElement = document.addElement(“catalog”);   

279.      catalogElement.addComment(“An XML Catalog”);   

280.      catalogElement.addProcessingInstruction(“target”,”text”);   

281.      Element journalElement =  catalogElement.addElement(“journal”);   

282.      journalElement.addAttribute(“title”, “XML Zone”);   

283.      journalElement.addAttribute(“publisher”, “IBM developerWorks”);   

284.      Element articleElement=journalElement.addElement(“article”);   

285.      articleElement.addAttribute(“level”, “Intermediate”);   

286.      articleElement.addAttribute(“date”, “December-2001”);   

287.      Element  titleElement=articleElement.addElement(“title”);   

288.      titleElement.setText(“Java configuration with XML Schema”);   

289.      Element authorElement=articleElement.addElement(“author”);   

290.      Element  firstNameElement=authorElement.addElement(“firstname”);   

291.      firstNameElement.setText(“Marcello”);   

292.      Element lastNameElement=authorElement.addElement(“lastname”);   

293.      lastNameElement.setText(“Vitaletti”);   

294.      document.addDocType(“catalog”,   

295.                            null,”file://c:/Dtds/catalog.dtd”);   

296.     try{   

297.     XMLWriter output = new XMLWriter(   

298.             new FileWriter( new File(“c:/catalog/catalog.xml”) ));   

299.         output.write( document );   

300.         output.close();   

301.         }   

302.      catch(IOException e){System.out.println(e.getMessage());}   

303. }   

304. public static void main(String[] argv){   

305. XmlDom4J dom4j=new XmlDom4J();   

306. dom4j.generateDocument();   

307. }}   

308.     

309.   

310.   

311. 這一節討論了創建 XML 文檔的過程,下一節將介紹使用 dom4j API 修改這里創建的 XML 文檔。    

312.   

313.   

314.   

315.     

316.   

317.   

318.  回頁首    

319.     

320.   

321.   

322.   

323. 修改文檔   

324.   

325. 這一節說明如何使用 dom4j API 修改示例 XML 文檔 catalog.xml。   

326.   

327. 使用 SAXReader 解析 XML 文檔 catalog.xml:   

328.   

329. SAXReader saxReader = new SAXReader();   

330.  Document document = saxReader.read(inputXml);    

331.   

332.   

333. SAXReader 包含在 org.dom4j.io 包中。    

334.   

335. inputXml 是從 c:/catalog/catalog.xml 創建的 java.io.File。使用 XPath 表達式從 article 元素中獲得 level 節點列表。如果 level 屬性值是“Intermediate”則改為“Introductory”。    

336.   

337. List list = document.selectNodes(“//article/@level” );   

338.       Iterator iter=list.iterator();   

339.         while(iter.hasNext()){   

340.             Attribute attribute=(Attribute)iter.next();   

341.                if(attribute.getValue().equals(“Intermediate”))   

342.                attribute.setValue(“Introductory”);    

343.        }    

344.   

345.   

346. 獲取 article 元素列表,從 article 元素中的 title 元素得到一個迭代器,并修改 title 元素的文本。    

347.   

348. list = document.selectNodes(“//article” );   

349.      iter=list.iterator();   

350.    while(iter.hasNext()){   

351.        Element element=(Element)iter.next();   

352.       Iterator iterator=element.elementIterator(“title”);   

353.    while(iterator.hasNext()){   

354.    Element titleElement=(Element)iterator.next();   

355.    if(titleElement.getText().equals(“Java configuration with XML Schema”))   

356.      titleElement.setText(“Create flexible and extensible XML schema”);   

357.     }}    

358.   

359.   

360. 通過和 title 元素類似的過程修改 author 元素。    

361.   

362. 清單 4 所示的示例程序 Dom4JParser.java 用于把 catalog.xml 文檔修改成 catalog-modified.xml 文檔。   

363.   

364. 清單 4. 用于修改 catalog.xml 的程序(Dom4Jparser.java)    

365. import org.dom4j.Document;   

366. import org.dom4j.Element;   

367. import org.dom4j.Attribute;   

368. import java.util.List;   

369. import java.util.Iterator;   

370. import org.dom4j.io.XMLWriter;   

371. import java.io.*;   

372. import org.dom4j.DocumentException;   

373. import org.dom4j.io.SAXReader;    

374. public class Dom4JParser{   

375.  public void modifyDocument(File inputXml){   

376.   try{   

377.    SAXReader saxReader = new SAXReader();   

378.    Document document = saxReader.read(inputXml);   

379.    List list = document.selectNodes(“//article/@level” );   

380.    Iterator iter=list.iterator();   

381.    while(iter.hasNext()){   

382.     Attribute attribute=(Attribute)iter.next();   

383.     if(attribute.getValue().equals(“Intermediate”))   

384.       attribute.setValue(“Introductory”);    

385.        }   

386.       

387.    list = document.selectNodes(“//article/@date” );   

388.    iter=list.iterator();   

389.    while(iter.hasNext()){   

390.     Attribute attribute=(Attribute)iter.next();   

391.     if(attribute.getValue().equals(“December-2001”))   

392.       attribute.setValue(“October-2002”);   

393.        }   

394.    list = document.selectNodes(“//article” );   

395.    iter=list.iterator();   

396.    while(iter.hasNext()){   

397.     Element element=(Element)iter.next();   

398.     Iterator iterator=element.elementIterator(“title”);   

399.       while(iterator.hasNext()){   

400.         Element titleElement=(Element)iterator.next();   

401.         if(titleElement.getText().equals(“Java configuration with XML   

402.       Schema”))   

403.         titleElement.setText(“Create flexible and extensible XML schema”);   

404.                                           }   

405.                                 }   

406.     list = document.selectNodes(“//article/author” );   

407.     iter=list.iterator();   

408.      while(iter.hasNext()){   

409.      Element element=(Element)iter.next();   

410.      Iterator iterator=element.elementIterator(“firstname”);   

411.      while(iterator.hasNext()){   

412.       Element firstNameElement=(Element)iterator.next();   

413.       if(firstNameElement.getText().equals(“Marcello”))   

414.       firstNameElement.setText(“Ayesha”);   

415.                                      }   

416.                               }   

417.     list = document.selectNodes(“//article/author” );   

418.     iter=list.iterator();   

419.      while(iter.hasNext()){   

420.       Element element=(Element)iter.next();   

421.       Iterator iterator=element.elementIterator(“lastname”);   

422.      while(iterator.hasNext()){   

423.       Element lastNameElement=(Element)iterator.next();   

424.       if(lastNameElement.getText().equals(“Vitaletti”))   

425.       lastNameElement.setText(“Malik”);   

426.                                   }   

427.                                }   

428.      XMLWriter output = new XMLWriter(   

429.       new FileWriter( new File(“c:/catalog/catalog-modified.xml”) ));   

430.      output.write( document );   

431.      output.close();   

432.    }   

433.     

434.   catch(DocumentException e)   

435.                  {   

436.                   System.out.println(e.getMessage());   

437.                             }   

438.   catch(IOException e){   

439.                        System.out.println(e.getMessage());   

440.                     }   

441.  }   

442.  public static void main(String[] argv){   

443.   Dom4JParser dom4jParser=new Dom4JParser();   

444.   dom4jParser.modifyDocument(new File(“c:/catalog/catalog.xml”));   

445.                                         }   

446.    }   

447.    

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久亚洲精品国产精品黑人| 国产一区二区三区国产精品| 日韩一区二区三区视频| 日韩三级一区二区| 亚洲精品无码成人片久久| 91久久国产精品| 精品无码人妻一区二区免费蜜桃| 91麻豆精品视频在线观看| mm1313亚洲国产精品美女| 亚洲日韩国产精品乱-久| 国产亚洲日韩一区二区三区| 国产精品va在线观看无| 精品国产电影久久九九| 国产精品lululu在线观看| 国产精品国产精品国产专区不卡| 99精品视频在线在线视频观看| 无码人妻精品一区二区三| 久久精品成人免费观看| 久久国产精品老人性| 久久国产精品一国产精品| 久久久免费的精品| 无码人妻精品一区二区三区久久 | 动漫精品专区一区二区三区不卡| 日韩欧毛片免费视频| 日韩好片一区二区在线看| 日韩丰满少妇无吗视频激情内射| 日韩视频在线观看一区二区| 八区精品色欲人妻综合网| 日韩精品无码久久一区二区三 | 久久成人精品视频| 精品一区二区三区中文字幕| 久久99国产精品一区二区| 国产精品免费无遮挡无码永久视频| 精品久久久久久亚洲| 久久亚洲国产精品五月天| 少妇人妻偷人精品无码视频| 97精品在线视频| 麻豆麻豆必出精品入口| 中文字幕乱码亚洲精品一区 | 国产美女在线精品免费观看| 国产亚洲精品AAAA片APP|