`
chenzhuo1016
  • 浏览: 26302 次
  • 来自: ...
社区版块
存档分类
最新评论

jdom学习(6)

    博客分类:
  • xml
XML 
阅读更多
练习使用Jdom处理XML
package sunstar.chenzhuo.jdom;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringReader;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.jdom.xpath.XPath;

/**
 *
 * @Description        练习使用jdom处理XML文件
 * @Author             chenzhuo 
 * @Date               2007-1-25
 *
 */
public class JdomUtils {

    /**
     * @param args
     */
    public static void main(String[] args) {
         
        String xmlText = "
xml 代码
 
  1. <document><students><student><name>张三</name><sex></sex><age>23</age></student></students></document>  
";
        String fileName = "h:/20070125/test/test.xml";       
        writeTextToXml(xmlText, fileName);           
       
        Element node = new Element("student");
        Element name = new Element("name");
        Element sex = new Element("sex");
        Element age = new Element("age");
        name.setText("王五");
        sex.setText("女");
        age.setText("23");
        node.addContent(name);
        node.addContent(sex);
        node.addContent(age);
        String parentNodeName = "students";
        int parentIndex = 0;
        int addIndex = 3;       
       
        addNode(fileName, node, parentNodeName, parentIndex, addIndex);
       
        Element students = new Element("students");
        Element student = new Element("student");
        Element name2 = new Element("name");
        name2.setText("王三");
        //在这里student节点不能再使用name节点了(因为它已经被node节点使用了)!!!
        student.addContent(name2);
        students.addContent(student);
        addNode(fileName, students, "document", 0, 2);
       
        removeNode(fileName, "students", 1, 1);
    }
   
    /**
     * <P>Description:                       在指定的xml文件中删除某个节点(按指定的位置)</P>
     * @param fileName                     指定xml文件名
     * @param parentNodeName               指定要删除节点的父节点名称
     * @param parentIndex                  指定要删除节点父节点的索引位置(索引从零开始)
     * @param removeIndex                  指定要删除节点的索引位置(索引从零开始,包含文本节点)
     */
    public static void removeNode(String fileName,String parentNodeName,int parentIndex,int removeIndex)
    {
        SAXBuilder builder = new SAXBuilder();
        File file = new File(fileName);
        BufferedReader in = null;
        BufferedWriter wr = null;
        Document doc = null;
        try{
            in = new BufferedReader(new FileReader(file));
            doc = builder.build(in);
            XPath path = XPath.newInstance("//" + parentNodeName);
           
            Element parentNode = (Element) path.selectNodes(doc).get(parentIndex);
            parentNode.removeContent(removeIndex);
           
            wr = new BufferedWriter(new FileWriter(fileName));
            XMLOutputter out = getXMLOutputterWithFormat("GBK", "  ");
            out.output(doc, wr);
           
        }catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JDOMException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            if(in != null)
            {
                try {
                    in.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
           
            if(wr != null)
            {
                try {
                    wr.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
   
    /**
     * <P>Description:                   在指定的xml文件中添加一个节点(规定添加的位置)</P>
     * @param fileName                   指定xml文件名
     * @param node                       指定需要添加的节点元素
     * @param parentNodeName             指定父节点的名称
     * @param parentIndex                指定父节点的索引位置(索引从零开始)
     * @param addIndex                   指定添加节点在父节点下的索引位置(索引从零开始,包含文本节点)
     */
    public static void addNode(String fileName, Element node, String parentNodeName, int parentIndex, int addIndex) {
       
        SAXBuilder builder = new SAXBuilder();
        File file = new File(fileName);
        BufferedReader in = null;
        BufferedWriter wr = null;
        Document doc = null;
        try {
            in = new BufferedReader(new FileReader(file));
            doc = builder.build(in);
            Element  parent = null;
//            Iterator itr =  doc.getDescendants(new ElementFilter(parentNodeName));
//            for(int i = 0;itr.hasNext() && i < parentIndex;i++)
//            {
//                parent = (Element) itr.next();
//            }
           
            XPath path = XPath.newInstance("//" + parentNodeName);
            parent = (Element) path.selectNodes(doc).get(parentIndex);
           
            parent.addContent(addIndex, node);           
            XMLOutputter out = getXMLOutputterWithFormat("GBK", "  ");
           
            wr = new BufferedWriter(new FileWriter(fileName));
            out.output(doc,wr);
           
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JDOMException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            if(in != null)
            {
                try {
                    in.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
           
            if(wr != null)
            {
                try {
                    wr.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * <P>Description:            获取一个经过一般格式规范的XMLOupputter</P>
     * @param encoding TODO
     * @param indent TODO
     * @return
     */
    public static XMLOutputter getXMLOutputterWithFormat(String encoding, String indent) {
        Format format = Format.getCompactFormat();
         //设置xml文件的字符为gb2312
        format.setEncoding(encoding);
        //设置xml文件的缩进为4个空格
        format.setIndent(indent);
        XMLOutputter out = new XMLOutputter(format);
        return out;
    }
   
    /**
     * <P>Description:     将一个xml格式的字符串(该字符串中不能含有xml中的特殊字符,如:"&")写入到指定的xml文件中</P>
     * @param              xmlText
     * @param              fileName
     */
    public static void writeTextToXml(String xmlText, String fileName) {       
       
        BufferedReader in = new BufferedReader(new StringReader(xmlText));
       
        SAXBuilder builder = new SAXBuilder();
        Document doc = new Document();
        File file = new File(fileName);       
        FileWriter wr = null;
       
        try {
            doc = builder.build(in);
            XMLOutputter out = getXMLOutputterWithFormat("GBK", "  ");
           
            if(!file.exists())
            {
                file = FileUtils.createFile(fileName);
            }
            wr = new FileWriter(file);
            out.output(doc, wr);           
           
        } catch (JDOMException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            if(in != null)
            {
                try {
                    in.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
           
            if(wr != null )
            {
                try {
                    wr.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
           
        }
    }

}
分享到:
评论

相关推荐

    jdom学习读取xml文件

    jdom学习读取xml文件资料小列子,非常简单明了。

    jdom学习读取xml文件.files

    XML(eXtensible Markup Language)是一种用于存储和传输数据的标准格式,特别是在Java应用程序和Spring框架中...通过阅读提供的`jdom.doc`文档和`jdom学习读取xml文件.files`中的示例,你可以更全面地掌握这些知识。

    JDom学习资料

    **JDom学习资料详解** JDom,全称为Java Document Object Model,是一款专为Java设计的DOM(Document Object Model)解析库。它允许开发者以一种高效、便捷的方式处理XML文档,提供了一种基于Java的API来创建、修改...

    JDOM 帮助文档!

    **JDOM:XML处理的利器** 在信息技术领域,XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件、文档存储等场景。为了方便开发者处理XML文档,各种解析库应运而生,其中...

    jdom源码+jdom.jar

    6. **`XPath`**:JDOM支持XPath表达式,通过`XPath`类可以方便地查找XML文档中的特定节点。 在实际应用中,你可以使用JDOM来执行以下操作: - **解析XML**:通过`SAXBuilder`或`DOMBuilder`从XML文件或字符串创建`...

    jdom的两种版本jar包集合

    1. **jdom-2.0.6-javadoc.jar**: 包含了JDOM 2.0.6版本的API文档,开发者可以通过查看这个JAR来了解JDOM的所有类、接口和方法,便于学习和使用。 2. **jdom-2.0.6-sources.jar**: 提供了JDOM 2.0.6的源代码,开发者...

    jdom-1.1.2&jdom帮助文档

    对于开发者来说,这是了解和学习 JDOM 的重要资源。文档详细解释了每个类、接口和方法的用法,帮助开发者快速上手。 总结,JDOM 1.1.2 是一个强大且易于使用的 XML 处理库,特别适合 Java 开发者。其提供的 API ...

    java org.jdom 包下载

    1. **jdom-2.0.5-javadoc.jar**:这是JDOM的API文档,开发者可以通过查看这个JAR文件中的文档来了解每个类和方法的详细信息,这对于学习和使用JDOM非常有帮助。 2. **jdom-2.0.5-sources.jar**:包含了JDOM库的源...

    JDOM1.1(Jdom文档)

    然而,对于理解和学习XML处理,JDOM1.1仍是一个优秀的起点,尤其是结合提供的API文档和源代码,可以帮助开发者快速掌握XML编程技巧。 总之,JDOM1.1是Java环境下处理XML文档的一个强大工具,尤其适合小型到中型的...

    jdom.rar内含多个jdom包

    JDOM,全称为Java Document Object Model,是一种专为Java设计的XML处理库。它提供了一种方便、高效的方式来创建、构建、修改和读取XML文档。JDOM的主要目标是简化XML处理,使得开发者能更直观地操作XML数据,而无需...

    jdom-2.0_6.zip

    这个压缩包"jdom-2.0_6.zip"包含了多个相关的JAR文件,分别是用于文档注释、源代码、单元测试以及核心功能和扩展功能的JAR。 首先,"jdom-2.0.6-javadoc.jar"是JDOM 2.0.6的API文档,其中包含了详细的类、方法和...

    Jdom教程 Jdom教程.pdf

    ### JDOM教程知识点详解 #### 一、JDOM简介 ...通过上述知识点的学习,我们可以了解到JDOM的基本使用方法,包括创建XML文档、解析XML文档以及使用XPath进行查询等功能。这对于开发者来说是非常有价值的工具。

    jdom英文帮助文档

    《JDOM英文帮助文档》是Java开发者不可或缺的参考资料,尤其对于初学者而言,它提供了全面且深入的JDOM库知识。JDOM,全称为Java Document Object Model,是Java平台上的...总之,这份文档是学习和应用JDOM的宝贵资源。

    jdom的帮助文档 jdom的帮助文档

    6. **JDOMWriter**和**JDOMReader**: 这两个类用于将JDOM文档写入XML文件或从XML文件读取到JDOM文档。 在Web开发中,JDOM的应用广泛,例如: - **配置文件处理**: 许多Web应用需要读取和写入XML配置文件,JDOM提供...

    jdom的源代码文档

    总的来说,通过对JDOM源代码的深入学习,不仅可以提升你对XML处理的理解,还能帮助你更好地利用JDOM进行XML数据的处理,提高开发效率,避免潜在的问题。无论你是初次接触JDOM,还是希望深化对它的认识,研究源代码都...

    jdom - 2.0.1

    - **jdom-2.0.1-sources.jar**:包含了 JDOM 的源代码,方便开发者查看和学习实现细节。 - **jdom-2.0.1-contrib.jar**:可能包含了一些额外的贡献代码或示例。 - **lib**:可能是一个包含依赖库的目录,确保 JDOM...

    jdom-1.1.1 和API

    总之,JDOM是Java开发者处理XML的得力工具,它的API文档和示例能加速你的学习过程,使你能够更高效地在项目中利用XML数据。无论你是新手还是经验丰富的开发者,理解并掌握JDOM都将对你的XML编程技能大有裨益。

    jdom介绍及使用指南

    ### JDOM介绍及使用指南 #### 一、JDOM包概览 JDOM是一个轻量级的Java XML API,它提供了简洁的API用于处理XML文档。JDOM的主要优点在于其...对于初学者来说,JDOM的学习曲线相对平缓,同时也能满足高级用户的需求。

    jdom-1.1.1 下载

    `jdom-test-1.1.1.zip`文件包含了这些测试代码,对于学习JDOM的使用和理解其内部机制具有很高的价值。 总之,JDOM 1.1.1为Java开发者提供了一种强大的工具,用于处理XML文档。它的面向对象设计、XPath支持以及丰富...

    jdom1.1.src

    总的来说,JDOM1.1是Java环境下处理XML文档的强大工具,其源码的学习不仅可以帮助我们掌握XML解析和操作的基本原理,还能提高我们在实际项目中应用XML的能力。通过深入分析JDOM1.1的源码,我们可以更好地理解Java与...

Global site tag (gtag.js) - Google Analytics