dom4j帮助文档在dom4j-1.6.1/docs/guide.html文件里面,全部是英文,但是基本上应该能看懂。
1、 四种操作xml的方式:SAX,DOM,JDOM,DOM4J.
2、 DOM(Document Object Model):意思是把整个xml做为一个整体对象,直接全部放到内存里面,不管xml文件有多大;
3、 SAX=Sample API for XML:假如xml文件有2G,用第一种方式,是很困难的,SAX用的是一种类似流媒体方式进行的。
DOM和SAX是Java的API,处理xml文件的时候,相对来说是比较困难的,于是出现了下面两种框架,包装了上面两个框架。
4、 JDOM:
5、 DOM4J:
6、 利用DOM4J解析xml文件(读取所有的属性节点)。
Document可以理解为整个文档对象
取root节点。Document.getRootElement()返回的是一个Element(元素)
7、 理解运用xpath,path就是路径,xpath在xml文件里面找到特定的节点。
Document.selectNodes(“//hibernate-mapping/class/property”) //其中hibenate-mapping是根节点。做变org.dom4j.Node对象返回的。
Document.selectSingleNodes(“//hibernate-mapping/class/property”)//只拿第一个。
基中@name是property的属性名valueOf是拿出name的值;
需要加入DOM4J里面的jaxen包
8、 DOM4J的生成xml文件
9、 用FileWriter生成xml文件的时候,可能没有格式,可以用XMLWriter类,这样自动进行美化。
10、 DOM4J修改xml文件;很少用。
11、 自动生成代码往往用的是:freemarker或velocity,这是常用的。用dom4j生成也很少用。
12、 怎么用表里面的结构生成xml文件。
13、 JavaDB
a) Properties对象:可以理解为一个表格对应key,value
14、 Databasemetadata,可以能过这个JDK类,读取数据库的表结构,通过这个表结构做一些自己的事情。(熟悉用法)通过JDK文档和google学习
15、 元数据就是数据的数据,用来描述数据的数据。
16、 DWR,对Ajax框架封住得比较好,是类和java的结合。
<?xml version="1.0" encoding="UTF-8"?> <node> <book> <title>JAVA编程思想</title> <author>XX</author> <price>12.5</price> </book> <book bookid="isbsb-111"> <title>Effective Java</title> <author>Jack</author> <price>22.5</price> <批发价>18</批发价> </book> </node>
demo:
package com.itheima.dom4j.test; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.Node; import org.junit.Test; import com.itheima.utils.Dom4jUtil; /* * 1、得到某个具体的节点内容 2、遍历所有元素节点 3、修改某个元素节点的主体内容 4、向指定元素节点中增加子元素节点 5、向指定元素节点上增加同级元素节点 6、删除指定元素节点 7、操作XML文件属性 Element root =document.getRootElement();//得到根结点 root.nodeCount();//根结点下,子结点个数 ele.node(i);//第i个结点 authorEle.getText();取结点的文本 elements("书");所有的书结点 element("作者");得到一个作者 */ public class Dom4jTest { // 1、得到某个具体的节点内容 在第二本书的作者 @Test public void test1(){ try { //1.得到Document对象 Document document = Dom4jUtil.getDocument(); //2.得到根结点 //Element root = document.getRootElement(); //3.找第二本书 //Element node = (Element)root.elements("书").get(1); //4再找第二本书的作者 //Element authorEle = node.element("作者"); //----------xpath-------------- Node authorEle = document.selectSingleNode("//书[2]/作者"); //5.读取文本 System.out.println(authorEle.getText()); } catch (Exception e) { e.printStackTrace(); } } //2、遍历所有元素节点 @Test public void test2(){ try { //1.得到Document对象 Document document = Dom4jUtil.getDocument(); //2.得到根结点 Element root = document.getRootElement(); //3.调用 treeWalk(root); } catch (Exception e) { e.printStackTrace(); } } public void treeWalk(Element ele){ System.out.println(ele.getName()); for(int i=0;i<ele.nodeCount();i++){ Node node = ele.node(i);//第i个结点 if(node instanceof Element){ treeWalk((Element)node); } } } //3、修改某个元素节点的主体内容 第一本书的作者改为于磊 @Test public void test3(){ try { //1.得到Document对象 Document document = Dom4jUtil.getDocument(); //2.得到根结点 //Element root = document.getRootElement(); //Element bookEle = root.element("书");//找到第一本书 //3.找到第一本书的作者 //Element authorEle = bookEle.element("作者"); //authorEle.setText("于磊"); //----------------xpath------------------------ Node node = document.selectSingleNode("/书架/书[1]/作者"); node.setText("于总"); //4.写回XML Dom4jUtil.writeDocument2Xml(document); } catch (Exception e) { e.printStackTrace(); } } //4、向指定元素节点中增加子元素节点 在第二本书的子结点中添加一个批发价 @Test public void test4(){ try { //1.得到Document对象 Document document = Dom4jUtil.getDocument(); //2.得到根结点 //Element root = document.getRootElement(); //3.找到第二本书 //Element bookEle = (Element)root.elements().get(1); //bookEle.addElement("批发价").setText("80"); //-------------xpath--------------------------- Element node = (Element)document.selectSingleNode("/书架/书[2]"); node.addElement("批发价").setText("80"); //4.写回XML Dom4jUtil.writeDocument2Xml(document); } catch (Exception e) { e.printStackTrace(); } } //5、向指定元素节点上增加同级元素节点 在第一本书的售价前面,添加一个内部价 @Test public void test5(){ try { //1.得到Document对象 Document document = Dom4jUtil.getDocument(); //2.得到根结点 Element root = document.getRootElement(); Element bookEle = root.element("书"); //Element priceEle = bookEle.element("售价"); //通过DocumentHelper类提供的createElement()创建一个结点 Element innerPriceNode = DocumentHelper.createElement("内部价"); innerPriceNode.setText("200"); bookEle.elements().add(2, innerPriceNode); //4.写回XML Dom4jUtil.writeDocument2Xml(document); } catch (Exception e) { e.printStackTrace(); } } //6、删除指定元素节点 删除第一本书的内部价结点 @Test public void test6(){ try { //1.得到Document对象 Document document = Dom4jUtil.getDocument(); //2.得到根结点 Element root = document.getRootElement(); //找到第一本书 Element bookEle = root.element("书"); Element innerPriceEle = bookEle.element("内部价"); bookEle.remove(innerPriceEle);//删除子结点 //4.写回XML Dom4jUtil.writeDocument2Xml(document); } catch (Exception e) { e.printStackTrace(); } } //7、操作XML文件属性 在第二本书的书结点中,添加一个bookid属性 @Test public void test7(){ try { //1.得到Document对象 Document document = Dom4jUtil.getDocument(); //2.得到根结点 Element root = document.getRootElement(); //3找到第二本书的书结点 Element secondBookEle = (Element)root.elements("书").get(1); //4.设置属性 secondBookEle.addAttribute("bookid", "isbsb-111"); //取属性值 //String sbstr = secondBookEle.attributeValue("bookid"); //System.out.println(sbstr); //4.写回XML Dom4jUtil.writeDocument2Xml(document); } catch (Exception e) { e.printStackTrace(); } } }