DOM4J的使用(二)-----写XML及改、删

在写上篇文章时,不小心丢一部分,现在补在这篇上面:

   //根据指定条件快速获取某个节点
   Node node = root.selectSingleNode("/root/d[@name='d22']");
   System.out.println(node.asXML()); //将获取的节点转换成字符串
   System.out.println("id: " + node.valueOf("@id") + " name: " + node.valueOf("@name") + " 内容: " + node.getText());

  //递归遍历某个节点
   recursive(root);
   /**
  * 递归遍历某个节点
  * @param element 显示内容的节点
  */
  public void recursive(Element element) {
         for (int i = 0, size = element.nodeCount(); i < size; i++) {
                  Node node = element.node(i);
                  if (node instanceof Element) {
                      recursive((Element) node);
                  } else {
                      System.out.println("##" + "==" + node.getText());
                  }
         }
 }

上面的一些读取操作都是针对于XML文件的,下面是对于XML文件的,读取XML文本跟读取XML文件都是一样的,关键是XML格式的文本要写的正确:
   StringBuffer buffer = new StringBuffer(1000);
   buffer.append("<?xml version=/"1.0/" encoding=/"UTF-8/"?>/r<root>/r")
       .append("<d id=/"d2/" name=/"d22/">d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2</d>")
       .append("/r</root>/r");
   xml.readXMLByText(buffer.toString());

 /**
  * 读取XML文本并遍历节点
  * @param textXML XML文本
  * @throws DocumentException 获取Document对象时出现的异常
  */
 public void readXMLByText(String textXML) throws DocumentException {
      Document doc = getDocObjByText(textXML); //获取Document对象
      if (doc != null) {
            Element root = doc.getRootElement();
            for (Iterator it = root.elementIterator(); it.hasNext();) {
                  Element el = (Element)it.next();
                  System.out.println("节点名:" + el.getName() + " 内容:" + el.getText() + " id: " + 
                  el.attributeValue("id") + " name: " + el.attributeValue("name"));
            }
      }
 }

下面是新建一个XML文件:

先贴出新建的XML文件:
<?xml version="1.0" encoding="GBK"?>
<root>
    <!--这是注解-->
    <a>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</a>
    <f id="f1" name="f11" length="44" type="string">fffffffffffffffffffffffffffffffffffffff</f>
    <d id="d1" name="d11">
        <d1>
            <d11>d11d11d11d11d11d11d11d11d11d11</d11>
        </d1>
        <d2 id="d22" name="d222" type="string">d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2</d2>
    </d>
</root>

下面是代码:
 /**
  * 写XML文件
  */
 public void writeXML(){
    try {
       Document doc = getDocObjByAuto(); //得到Document对象
       //添加文档类型说明,读取XML文件时,文档类型说明一定要存在,否则会报错
       //doc.addDocType("root" ,  null , "file://c:/Dtds/catalog.dtd" );
       Element root = doc.addElement("root"); //添加根元素

       root.addComment("这是注解"); //添加一个注解
       //添加a元素,并指定内容
       root.addElement("a").addText("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); //或用setText();
   
       Document document = getDocObjByFile("d:/menu.xml");
       Element elef = document.getRootElement().element("f"); //获取f元素
       root.add((Element)elef.clone()); //将获取到的f元素添加的新建的XML文件中
   
       Element d = root.addElement("d"); //添加d元素
       Element el = document.getRootElement().element("d").element("d2"); //获取d2元素
       d.addAttribute("id", "d1"); //添加id属性
       d.addAttribute("name", "d11"); //添加name属性

       //添加d1和d11元素,并给d11元素指定内容
       d.addElement("d1").addElement("d11").setText("d11d11d11d11d11d11d11d11d11d11");

       Element d2 = d.addElement("d2"); //添加d2元素
       d2.add((Attribute)el.attribute("id").clone()); //添加id属性
       d2.add((Attribute)el.attribute("name").clone()); //添加name属性
       d2.add((Attribute)el.attribute("type").clone()); //添加type属性
       d2.setText("d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2");

       OutputFormat format = OutputFormat.createPrettyPrint(); //用于格式化XML文件
       format.setEncoding("GBK" ); // 指定XML编码
       format.setIndent("    "); //根据给定的设置缩进(四个空格)<=>setIndentSize(4), 或可用setIndent(true)
       XMLWriter writer = new XMLWriter(new FileWriter("d:/menu1.xml"), format);
       writer.write(doc); //将XML文件写到指定的位置
       writer.close();
       System.out.println("输出成功!");
    } catch (Exception e) {
       e.printStackTrace();
    }
 }

下面对刚新建的XML做一些操作,如添加、修改、删除属性,修改元素内容、删除元素:

先贴出修改后的XML文件:
<?xml version="1.0" encoding="GBK"?>
<root>
    <!--这是注解--> 
    <a id="a1">11111111111111111111111111</a> 
    <f id="f1" name="f11" length="44">fffffffffffffffffffffffffffffffffffffff</f> 
    <d id="d1" name="d11">
        <d2 id="d22" name="88888" type="string">d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2</d2>
    </d>
</root>

下面是代码:
/**
  * 对XML进行修改、删除操作
  * @param pathXML XML文件路径
  */
 public void updateAndDelete(String pathXML) {
      try {
          Document document = getDocObjByFile(pathXML);
          if (document != null) {
                    Element root = document.getRootElement();
    
                    Element a = root.element("a");
                    a.addAttribute("id", "a1"); //为a元素添加属性id
                    a.setText("11111111111111111111111111"); //修改a元素的内容  
    
                    Element d2 = root.element("d").element("d2");
                    d2.attribute("name").setValue("88888"); //修改d2的name属性
    
                    Element elef = root.element("f");
                    elef.remove(elef.attribute("type")); //删除f元素的type属性
    
                    Element d = root.element("d");
                    d.remove(d.element("d1")); //删除d1元素
    
                    OutputFormat format = OutputFormat.createPrettyPrint();
                    format.setEncoding("GBK" ); // 指定XML编码
                    format.setIndent("    "); //根据给定的设置缩进(四个空格)<=>setIndentSize(4), 或可用setIndent(true)
                    XMLWriter writer = new XMLWriter(new FileWriter("d:/menu11.xml"), format);
                    writer.write(document); //将XML文件写到指定的位置
                    writer.close();
                    System.out.println("修改成功!");
          } 
      } catch (Exception e) {
            e.printStackTrace();
      }
 }

关于DOM4J的使用基本就写完了,当然DOM4J 的操作不只于上面所写的这些,这些只是基本操作而已,至于更多的操作的使用要靠自己了。文章所使用的代码,就写在下一章了。如有不足的地方,欢迎指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值