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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

dom4j解析原理

Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。 Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。 使用Dom4j开发,需下载dom4j相应的jar文件。


1、基本练习 a、拷贝jar包: 把dom4j-1.6.1.jar加入到你的classpath中 b、基本操作

// 1、得到某个具体的节点内容:金瓶梅

@Testpublic void test1() throws Exception{    SAXReader reader = new SAXReader();    Document document = reader.read("src/book.xml");    //首先要得到根元素    Element root = document.getRootElement();    List<Element> bookElements = root.elements();//      Element bookName = (Element) bookElements.get(0).elements().get(0);//      System.out.println(bookName.getText());    System.out.println(bookElements.get(0).elementText("书名"));}

// 2、遍历所有元素节点:名称

@Testpublic void test2()throws Exception{    SAXReader reader = new SAXReader();    Document document = reader.read("src/book.xml");    //首先要得到根元素    Element root = document.getRootElement();    treeWalk(root);}public void treeWalk(Element rootElement){//递归    System.out.println(rootElement.getName());    int nodeCount = rootElement.nodeCount();//子节点的数量    for(int i=0;i<nodeCount;i++){        Node node = rootElement.node(i);//得到一个子节点        if(node instanceof Element){            treeWalk((Element)node);        }    }}

// 3、修改某个元素节点的主体内容:<售价>10元---20

@Testpublic void test3()throws Exception{    SAXReader reader = new SAXReader();    Document document = reader.read("src/book.xml");    //首先要得到根元素    Element root = document.getRootElement();    //得售价    Element priceElement = root.element("书").element("售价");    priceElement.setText("21元");    //写回XML文档//      OutputFormat format = OutputFormat.createCompactFormat();//去除空格回车换行,适合运行期间    OutputFormat format = OutputFormat.createPrettyPrint();//漂亮的格式 默认编码是UTF-8    XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"), format);    writer.write(document);    writer.close();}

// 4、向指定元素节点中增加子元素节点:<出版社>黑马程序员

@Testpublic void test4()throws Exception{    SAXReader reader = new SAXReader();    Document document = reader.read("src/book.xml");    //首先要得到根元素    Element root = document.getRootElement();    //得售价    Element bookElement = root.element("书");    //创建新元素    Element publisherElement = DocumentHelper.createElement("出版社");    publisherElement.setText("黑马程序员");    bookElement.add(publisherElement);    //写回XML文档//      OutputFormat format = OutputFormat.createCompactFormat();//去除空格回车换行,适合运行期间    OutputFormat format = OutputFormat.createPrettyPrint();//漂亮的格式 默认编码是UTF-8    XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"), format);    writer.write(document);    writer.close();}

// 5、向指定元素节点上增加同级元素节点:<售价>21元 添加<批发价>

@Testpublic void test5()throws Exception{    SAXReader reader = new SAXReader();    Document document = reader.read("src/book.xml");    //首先要得到根元素    Element root = document.getRootElement();    //得售价    Element bookElement = root.element("书");    //创建新元素    Element priceElement = DocumentHelper.createElement("批发价");    priceElement.setText("30元");    List<Element> bookChildren = bookElement.elements();//得到书的子元素    bookChildren.add(2, priceElement);    //写回XML文档//      OutputFormat format = OutputFormat.createCompactFormat();//去除空格回车换行,适合运行期间    OutputFormat format = OutputFormat.createPrettyPrint();//漂亮的格式 默认编码是UTF-8    XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"), format);    writer.write(document);    writer.close();}

// 6、删除指定元素节点:批发价

@Testpublic void test6()throws Exception{    SAXReader reader = new SAXReader();    Document document = reader.read("src/book.xml");    //首先要得到根元素    Element root = document.getRootElement();    Element priceElement = root.element("书").element("批发价");    priceElement.getParent().remove(priceElement);    //写回XML文档//      OutputFormat format = OutputFormat.createCompactFormat();//去除空格回车换行,适合运行期间    OutputFormat format = OutputFormat.createPrettyPrint();//漂亮的格式 默认编码是UTF-8    XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"), format);    writer.write(document);    writer.close();}

// 7、操作XML文件属性

@Testpublic void test7()throws Exception{    SAXReader reader = new SAXReader();    Document document = reader.read("src/book.xml");    //首先要得到根元素    Element root = document.getRootElement();    Element book = root.element("书");    System.out.println(book.attributeValue("ISBN"));}@Testpublic void test8()throws Exception{    SAXReader reader = new SAXReader();    Document document = reader.read("src/book.xml");    //首先要得到根元素    Element root = document.getRootElement();    Element book = root.element("书");    book.addAttribute("A", "B");    //写回XML文档//      OutputFormat format = OutputFormat.createCompactFormat();//去除空格回车换行,适合运行期间    OutputFormat format = OutputFormat.createPrettyPrint();//漂亮的格式 默认编码是UTF-8    XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"), format);    writer.write(document);    writer.close();}Xpath

XPath是一个努力为XSL转换XSLT和XPointer [ ] [ ]之间共享一个共同的XPointer功能语法和语义的结果。它的主要目的是解决一个XML XML文档部分[ ]。为了支持这一功能,还提供用于处理字符串的基本设施、数字和布尔值。XPath使用一个紧凑的、非XML语法方便使用在uri和XML属性值的XPath。XPath操作基于XML文档的逻辑结构,而不是其表面的语法。Xpath的名字来自其使用的符号在URL路径通过一个XML文档的层次结构导航。 除了用于定位,XPath还设计有一个真子集,可用于匹配(测试一个节点是否符合一个模式);使用XPath进行XSLT。

XPath模型的XML文档的节点树。有不同类型的节点,包括元素节点、属性节点和文本节点。XPath定义了一个方法来计算每个节点类型字符串值。某些类型的节点也有名字。XPath完全支持XML命名空间的XML名称] [。因此,一个节点的名称被建模为一个地方的部分和一个可能的空命名空间URI;这就是所谓的扩展名。在[ 5数据模型]中详细描述了数据模型。

@Test//Xpathpublic void test11() throws Exception{    SAXReader reader = new SAXReader();    Document document = reader.read("src/book.xml");    Node n = document.selectSingleNode("//书[1]/书名");    System.out.println(n.getText());}@Test//Xpath:第一本书的ISBN的值public void test12() throws Exception{    SAXReader reader = new SAXReader();    Document document = reader.read("src/book.xml");    Node n = document.selectSingleNode("//书[1]");    System.out.println(n.valueOf("@ISBN"));}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马