閱讀349 返回首頁    go 阿裏雲 go 技術社區[雲棲]


傳智播客培訓2.21 XML編程

先看一個book.xml文件:

 

<?xml version="1.0" encoding="utf-8"?>

 

<書架> 

  <書> 

    <書名 >javaweb開發</書名>  

    <作者 name="zxx">張孝祥</作者>  

    <售價>69.0元</售價> 

  </書>  

  <書> 

    <書名 >java開發</書名>  

    <作者 name="老張">張孝祥</作者>  

    <售價>69.0元</售價> 

  </書> 

</書架>

 

下麵是對這個XML文件的一些常見操作:

 

  1. package cn.itcast.dom4j;
  2. import java.io.FileOutputStream;
  3. import java.io.OutputStreamWriter;
  4. import java.io.Writer;
  5. import java.util.List;
  6. import org.dom4j.Document;
  7. import org.dom4j.DocumentException;
  8. import org.dom4j.DocumentHelper;
  9. import org.dom4j.Element;
  10. import org.dom4j.io.OutputFormat;
  11. import org.dom4j.io.SAXReader;
  12. import org.dom4j.io.XMLWriter;
  13. import org.junit.Test;
  14. // Dom4j 增刪改查
  15. public class Dom4jDemo {
  16. // 查找第一本書的名字
  17. @Test
  18. public void find() throws Exception {
  19. // 1.創建解析器對象
  20. SAXReader reader = new SAXReader();
  21. // 2.解析一個xml
  22. Document document = reader.read("src/book.xml");
  23. // 3.獲得根元素
  24. Element rootElement = document.getRootElement();
  25. // 4.獲得書節點
  26. Element bookElement = rootElement.element("書"); // 獲得第一個指定名稱的子節點
  27. // 5.獲得書名節點
  28. Element booknameElement = bookElement.element("書名");
  29. // 6.輸出元素的內容
  30. String text = booknameElement.getText();
  31. System.out.println(text);
  32. }
  33. // 查找第二本書作者節點的name屬性
  34. @Test
  35. public void findAttribute() throws Exception {
  36. // 獲得Document
  37. Document document = Dom4jUtils.getDocument();
  38. // 獲得第二本書的作者節點
  39. // 根元素
  40. Element rootElement = document.getRootElement();
  41. // 獲得第二本書
  42. List<Element> elements = rootElement.elements("書");
  43. Element bookElement = elements.get(1);
  44. // 獲得作者
  45. Element authorElement = bookElement.element("作者");
  46. String value = authorElement.attributeValue("name");
  47. System.out.println(value);
  48. }
  49. // 增加一個節點, 第二本書增加一個售價
  50. @Test
  51. public void add() throws Exception {
  52. // 獲得Document
  53. Document document = Dom4jUtils.getDocument();
  54. // 獲得根元素
  55. Element rootElement = document.getRootElement();
  56. // 獲得第二本書
  57. Element bookElement = (Element) rootElement.elements("書").get(1);
  58. /* 傳統方式
  59. // 創建一個售價節點
  60. Element priceElement = DocumentHelper.createElement("售價");
  61. // 添加內容
  62. priceElement.setText("108元");
  63. // 加到書節點下麵
  64. bookElement.add(priceElement);*/
  65. // addElement方法創建了新元素,添加到當前元素下麵,返回了新創建的元素
  66. bookElement.addElement("售價").setText("108元");
  67. // 寫入xml
  68. Dom4jUtils.write2Xml(document);
  69. }
  70. //增加一個屬性
  71. @Test
  72. public void addAttribute() throws Exception {
  73. // 獲得Document
  74. Document document = Dom4jUtils.getDocument();
  75. // 獲得根元素
  76. Element rootElement = document.getRootElement();
  77. // 獲得第一個作者
  78. Element author = rootElement.element("書").element("作者");
  79. // 增加一個屬性
  80. author.addAttribute("name", "zxx");
  81. // 寫入文件
  82. Dom4jUtils.write2Xml(document);
  83. }
  84. //刪除一個節點
  85. @Test
  86. public void remove() throws Exception {
  87. // 獲得Document
  88. Document document = Dom4jUtils.getDocument();
  89. // 獲得根元素
  90. Element rootElement = document.getRootElement();
  91. // 獲得第二本書的第二個售價節點
  92. Element priceElement = (Element) ((Element) rootElement.elements("書").get(1)).elements("售價").get(1);
  93. // 獲得它的父節點刪除自身
  94. priceElement.getParent().remove(priceElement);
  95. // 寫入文件
  96. Dom4jUtils.write2Xml(document);
  97. }
  98. }
Dom4jUtils.java文件:
package cn.itcast.dom4j;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.UnsupportedEncodingException;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class Dom4jUtils {
// 獲得document對象
public static Document getDocument() throws DocumentException {
// 1.創建解析器對象
SAXReader reader = new SAXReader();
// 2.解析一個xml
return reader.read("src/book.xml");
}
public static void write2Xml(Document document) throws Exception {
// 寫入xml
// FileWriter流默認是用gb2312編碼
//FileWriter out = new FileWriter("src/book.xml");
/* 快捷的輸出方式
Writer out = new OutputStreamWriter(new FileOutputStream("src/book.xml"), "utf-8");
document.write(out);
out.close();*/
// 帶格式化的輸出方式
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");
/*Writer out = new OutputStreamWriter(new FileOutputStream("src/book.xml"), "utf-8");
XMLWriter writer = new XMLWriter(out, format);*/
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"), format);
writer.write(document);
writer.close();
}
}

 

最後更新:2017-04-02 06:51:36

  上一篇:go 異常為&quot;當IDENTITY_INSERT設置為OFF時&quot; 的解決
  下一篇:go 常見26個Jquery使用技巧(轉)