A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hejinzhong 中级黑马   /  2014-8-21 22:52  /  775 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


  1. package com.itheima;

  2. import javax.xml.parsers.DocumentBuilder;
  3. import javax.xml.parsers.DocumentBuilderFactory;
  4. import javax.xml.parsers.ParserConfigurationException;
  5. import javax.xml.transform.Transformer;
  6. import javax.xml.transform.TransformerConfigurationException;
  7. import javax.xml.transform.TransformerException;
  8. import javax.xml.transform.TransformerFactory;
  9. import javax.xml.transform.TransformerFactoryConfigurationError;
  10. import javax.xml.transform.dom.DOMSource;
  11. import javax.xml.transform.stream.StreamResult;

  12. import org.w3c.dom.Document;
  13. import org.w3c.dom.Element;
  14. import org.w3c.dom.Node;
  15. import org.w3c.dom.NodeList;

  16. public class DocumentDemo {

  17.         public static void main(String[] args) throws Exception {

  18.                 /**
  19.                  * (1)创建DOM解析器工厂 (2)得到DOM解析器对象 (3)通过parse()方法产生document对象,可以代表真个XML文档
  20.                  */
  21.                 DocumentBuilder db = DocumentBuilderFactory.newInstance()
  22.                                 .newDocumentBuilder();
  23.                 Document dm = db.parse("src/book.xml");

  24.                 /*
  25.                  * 查询某个节点的信息 (1)根据标签名称获取节点列表 (2)根据列表获取指定节点信息
  26.                  */
  27.                 test1(dm);

  28.                 /*
  29.                  * 遍历所有节点 (1)得到文档的根节点 (2)利用递归思想遍历
  30.                  */
  31.                 test2(dm);

  32.                 /*
  33.                  * 修改某个节点值 (1)根据标签名称获取节点 (2)修改相应信息 (3)将修改后信息写入文件
  34.                  */
  35.                 test3(dm);

  36.                 /*
  37.                  * 向指定元素节点中增加子元素节点 (1)获取相应节点 (2)创建一个节点 (3)将新节点作为子节点加入 (4)将修改后信息写入问价
  38.                  */
  39.                 test4(dm);

  40.                 /*
  41.                  * 向指定元素节点上增加同级元素节点 (1)获取节点 (2)创建新ELEMENT (3)获取节点的父节点,将新元素添加为其子节点
  42.                  * (4)写入文件
  43.                  */
  44.                 test5(dm);
  45.                 /*
  46.                  * 删除指定元素节点 (1)获取该节点 (2)或去该该节点的父节点,并用其删除该节点
  47.                  */
  48.                 test6(dm);

  49.                 /*
  50.                  * 增加属性 (1)获取节点 (2)添加属性 (3)写入文件
  51.                  */
  52.                 test7(dm);
  53.         }

  54.         private static void test7(Document dm) throws Exception {
  55.                 // 根据名称获取节点
  56.                 Node nd = dm.getElementsByTagName("售价").item(0);
  57.                 // 添加新属性,要先将其转换为元素
  58.                 ((Element) nd).setAttribute("sel", "跳楼价");
  59.                 // 写入文件
  60.                 TransformerFactory.newInstance().newTransformer()
  61.                                 .transform(new DOMSource(dm), new StreamResult("src/book.xml"));
  62.         }

  63.         private static void test6(Document dm) throws Exception {
  64.                 // 根据名称获取节点
  65.                 Node nd = dm.getElementsByTagName("出版社").item(0);
  66.                 // 获取其父节点,并删除该节点
  67.                 nd.getParentNode().removeChild(nd);
  68.                 // 写入文件
  69.                 TransformerFactory.newInstance().newTransformer()
  70.                                 .transform(new DOMSource(dm), new StreamResult("src/book.xml"));
  71.         }

  72.         private static void test5(Document dm) throws Exception {
  73.                 // 获取作者标签的第二个节点
  74.                 Node nd = dm.getElementsByTagName("作者").item(1);
  75.                 // 创建一个节点,并设置内容
  76.                 Element el = dm.createElement("出版社");
  77.                 el.setTextContent("黑马出版");
  78.                 // 获取父节点,并将新元素添加为其子节点
  79.                 nd.getParentNode().appendChild(el);
  80.                 // 写入文件
  81.                 TransformerFactory.newInstance().newTransformer()
  82.                                 .transform(new DOMSource(dm), new StreamResult("src/book.xml"));
  83.         }

  84.         private static void test4(Document dm) throws Exception {
  85.                 // 根据书名获取第一个ELEMENT
  86.                 Node nd = dm.getElementsByTagName("书名").item(0);
  87.                 // 创建一个新的ELEMENT
  88.                 Element el = dm.createElement("别名");
  89.                 // 为新元素设置内容
  90.                 el.setTextContent("东方不败");
  91.                 // 为nd添加子节点el
  92.                 nd.appendChild(el);
  93.                 // 将修改信息写入文件
  94.                 TransformerFactory.newInstance().newTransformer()
  95.                                 .transform(new DOMSource(dm), new StreamResult("src/book.xml"));
  96.         }

  97.         private static void test3(Document dm) throws Exception {
  98.                 // 获取第一个标签为售价的节点
  99.                 Node nd = dm.getElementsByTagName("售价").item(0);
  100.                 // 修改价格为50
  101.                 nd.setTextContent("80");
  102.                 // 将修改后的信息写入文件
  103.                 Transformer tf = TransformerFactory.newInstance().newTransformer();
  104.                 // 接收的两个参数分别是:源和目的
  105.                 tf.transform(new DOMSource(dm), new StreamResult("src/book.xml"));
  106.         }

  107.         private static void test2(Node dm) {
  108.                 // 获取文档中的所有子节点
  109.                 NodeList nl = dm.getChildNodes();
  110.                 // 遍历这些节点,并判断是否还为标签(ELEMENT)
  111.                 for (int i = 0; i < nl.getLength(); i++) {
  112.                         Node nd = nl.item(i);
  113.                         // 判断类型是否是标签
  114.                         if (nd.getNodeType() == Node.ELEMENT_NODE) {
  115.                                 System.out.println(nd.getNodeName());
  116.                                 test2(nd);
  117.                         } else {
  118.                                 System.out.println(nd.getTextContent());
  119.                         }
  120.                 }
  121.         }

  122.         private static void test1(Document dm) {

  123.                 // 根据标签名字获取一个列表
  124.                 NodeList nl = dm.getElementsByTagName("售价");
  125.                 // NodeList中提供了方法,获取某个位置的节点
  126.                 Node nd = nl.item(0);
  127.                 // 获取节点的三个属性值
  128.                 System.out.println(nd.getNodeType());
  129.                 System.out.println(nd.getNodeName());
  130.                 System.out.println(nd.getNodeValue());
  131.         }
  132. }
复制代码

1 个回复

倒序浏览
  好长啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马