Dom4j操作xml

package lxq;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Attribute;
import java.util.List;
import java.util.Iterator;
import org.dom4j.io.XMLWriter;
import java.io.*;

import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;

public class Dom4jTest
{
 /**
  * 创建一个xml文件
  */
 public void generateDocument()
 {
  // 使用 DocumentHelper 类创建一个文档实例。 DocumentHelper 是生成 XML 文档节点的 dom4j API
  // 工厂类。
  Document document = DocumentHelper.createDocument();

  // 使用 addElement() 方法创建根元素 catalog 。 addElement() 用于向 XML 文档中增加元素。
  Element catalogElement = document.addElement("catalog");

  // 在 catalog 元素中使用 addComment() 方法添加注释“An XML catalog”。
  catalogElement.addComment("An XML Catalog");

  // 在 catalog 元素中使用 addProcessingInstruction() 方法增加一个处理指令。
  catalogElement.addProcessingInstruction("target", "text");

  // 在 catalog 元素中使用 addElement() 方法增加 journal 元素。
  Element journalElement = catalogElement.addElement("journal");

  // 使用 addAttribute() 方法向 journal 元素添加 title 和 publisher 属性。
  journalElement.addAttribute("title", "XML Zone");
  journalElement.addAttribute("publisher", "IBM developerWorks");

  // 向 article 元素中添加 journal 元素。
  Element articleElement = journalElement.addElement("article");

  // 为 article 元素增加 level 和 date 属性。
  articleElement.addAttribute("level", "Intermediate");
  articleElement.addAttribute("date", "December-2001");

  // 向 article 元素中增加 title 元素。
  Element titleElement = articleElement.addElement("title");

  // 使用 setText() 方法设置 article 元素的文本。
  titleElement.setText("Java configuration with XML Schema");

  // 在 article 元素中增加 author 元素。
  Element authorElement = articleElement.addElement("author");

  // 在 author 元素中增加 firstname 元素并设置该元素的文本
  Element firstNameElement = authorElement.addElement("firstname");
  firstNameElement.setText("Marcello");
  Element lastNameElement = authorElement.addElement("lastname");
  lastNameElement.setText("Vitaletti");

  /*
   * 可以使用 addDocType() 方法添加文档类型说明。 这样就向 XML 文档中增加文档类型说明: <!DOCTYPE catalog
   * SYSTEM "file://c:/Dtds/catalog.dtd">
   */
  document.addDocType("catalog", null, "file://c:/Dtds/catalog.dtd");
  try
  {
   XMLWriter output = new XMLWriter(new FileWriter(new File(
     "c:/catalog.xml")));
   output.write(document);
   output.close();
  } catch (IOException e)
  {
   System.out.println(e.getMessage());
  }
 }

 /**
  * 修改xml文件
  */

 public void modifyDocument(File inputXml)
 {
  try
  {
   SAXReader saxReader = new SAXReader();
   Document document = saxReader.read(inputXml);
   List list = document.selectNodes("//article/@level");
   Iterator iter = list.iterator();
   while (iter.hasNext())
   {
    Attribute attribute = (Attribute) iter.next();
    if (attribute.getValue().equals("Intermediate"))
     attribute.setValue("Introductory");
   }

   list = document.selectNodes("//article/@date");
   iter = list.iterator();
   while (iter.hasNext())
   {
    Attribute attribute = (Attribute) iter.next();
    if (attribute.getValue().equals("December-2001"))
     attribute.setValue("October-2002");
   }
   list = document.selectNodes("//article");
   iter = list.iterator();
   while (iter.hasNext())
   {
    Element element = (Element) iter.next();
    Iterator iterator = element.elementIterator("title");
    while (iterator.hasNext())
    {
     Element titleElement = (Element) iterator.next();
     if (titleElement.getText().equals(
       "Java configuration with XMLSchema"))
      titleElement
        .setText("Create flexible and extensible XML schema");
    }
   }
   list = document.selectNodes("//article/author");
   iter = list.iterator();
   while (iter.hasNext())
   {
    Element element = (Element) iter.next();
    Iterator iterator = element.elementIterator("firstname");
    while (iterator.hasNext())
    {
     Element firstNameElement = (Element) iterator.next();
     if (firstNameElement.getText().equals("Marcello"))
      firstNameElement.setText("Ayesha");
    }
   }
   list = document.selectNodes("//article/author");
   iter = list.iterator();
   while (iter.hasNext())
   {
    Element element = (Element) iter.next();
    Iterator iterator = element.elementIterator("lastname");
    while (iterator.hasNext())
    {
     Element lastNameElement = (Element) iterator.next();
     if (lastNameElement.getText().equals("Vitaletti"))
      lastNameElement.setText("Malik");
    }
   }
   XMLWriter output = new XMLWriter(new FileWriter(new File(
     "c:/catalog/catalog-modified.xml")));
   output.write(document);
   output.close();

  }

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

 /**
  * 将xml文件读取到控制台
  */

 public Document parse() throws DocumentException
 {
  SAXReader saxReader = new SAXReader();
  Document document = saxReader.read("c:/maven.xml");

  System.out.println(document.asXML());
  return document;
 }

 /**
  * 将字符串转化为Document
  *
  * @param str
  *            输入的字符串
  * @return 生成的document
  * @throws DocumentException
  */
 public Document parserStrtoDocument(String str) throws DocumentException
 {
  Document document = DocumentHelper.parseText(str);
  System.out.println(document.asXML());
  return document;
 }

 /**
  * 取得xml的节点和属性的值
  *
  * @throws DocumentException
  */
 public void getBaseInfofromDocument() throws DocumentException
 {
  String str = "<root><book type='science'><Name>Java</Name><price>100</price></book></root>";
  // 生成一个Document
  Document document = DocumentHelper.parseText(str);
  System.out.println("xml文件样式" + document.asXML());
  // 取得根结点
  Element root = document.getRootElement();
  // 取得book节点
  Element book = root.element("book");
  // 取得book节点的type属性的值
  String type = book.attributeValue("type");
  // 取得Name节点
  Element name = book.element("Name");
  // 取得书名
  String bookname = name.getText();
  // 取得书的价钱
  int price = Integer.parseInt(book.element("price").getText());

  // 输出书目信息
  System.out.println("书名:" + bookname);
  System.out.println("所属类别:" + type);
  System.out.println("价格:" + price);
 }

 /**
  * 利用迭代,xpath取得xml的节点及其属性值
  *
  * @throws DocumentException
  */
 public void getComplexInfofromDocument() throws DocumentException
 {

  String str = "<root><book type='science'><Name>Java</Name><price>100</price></book>"
    + "<book type='science'><Name>Oracle</Name><price>120</price></book>"
    + "<book type='society'><Name>Society security</Name><price>130</price></book>"
    + "<author><name>chb</name></author></root>";
  // 生成一个Document
  Document document = DocumentHelper.parseText(str);

  // 提取类型为"society"的书
  // 此处需要添加支持xpath的jar包,详细见备注
  Element society_book = (Element) document
    .selectSingleNode("/root/book[@type='society']");
  System.out.println(society_book.asXML());

  // 提取价格节点的列表
  System.out.println("-----------价格列表-------------");
  List price = document.selectNodes("//price");
  for (int i = 0; i < price.size(); i++)
  {
   Element elem_price = (Element) price.get(i);
   System.out.println(elem_price.getText());
  }

  // 循环根结点下的所有节点,若当前节点为book,则输出这本书的详细信息
  System.out.println("-------------书目详情------------");
  System.out.println("书名/t/t类别/t/t价格");
  Element root = document.getRootElement();
  Iterator iterator = root.elementIterator();
  while (iterator.hasNext())
  {
   Element element = (Element) iterator.next();
   if (element.getName().equals("book"))
   {
    System.out.print(element.element("Name").getText() + "/t");
    System.out.print(element.attributeValue("type") + "/t/t");
    System.out.print(element.element("price").getText() + "/n");
   }
  }

  // 查找作者姓名
  Element author = (Element) document.selectSingleNode("//author");
  System.out.println("---------" + author.element("name").getText()
    + "----------");
  // 提取作者的所有书目名称
  Iterator iterator_book = root.elementIterator("book");
  while (iterator_book.hasNext())
  {
   Element book = (Element) iterator_book.next();
   System.out.print(book.element("Name").getText() + "/t");
  }

  // 属性迭代
  System.out.println("/n-------属性迭代--------");
  String str1 = "<book type='science' name='Java' price='100'/>";
  Document document1 = DocumentHelper.parseText(str1);
  // 开始迭代
  Iterator iterator_attribute = document1.getRootElement()
    .attributeIterator();
  while (iterator_attribute.hasNext())
  {
   // 提取当前属性
   Attribute attribute = (Attribute) iterator_attribute.next();
   System.out
     .println(attribute.getName() + ":" + attribute.getValue());
  }
 }

 public static void main(String[] args) throws Exception
 {
  Dom4jTest dt = new Dom4jTest();
  dt.getComplexInfofromDocument();
 }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值