java对xml全面解析,增,删,改,以及将java对象重新编组为xml文件

简介:
写了一个jaxp用dom处理xml的代码,具体例外省略,自己看吧,希望对你有帮助。
如果这里的格式不习惯可以看我在csdn的博客
[url]http://blog.csdn.net/xhinker/archive/2007/03/16/1531717.aspx[/url]
被解析的xml文件名为AnewXMLfile.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
    Document   : AnewXMLfile.xml
    Created on : 2007年3月13日, 下午3:36
    Author     : xhinker
-->
<customers>
  <customer>
    <id>001</id>
    <name>xhinker</name>
    <address>harbin</address>
  </customer>
  <customer>
    <id>002</id>
    <name>Car</name>
    <address>Suzhou</address>
  </customer>
  <customer>
    <id>003</id>
    <name>Jimmy</name>
    <address>ChengDu</address>
  </customer>
  <customer>
    <id>004</id>
    <name>Henry</name>
    <address>Xi'an</address>
  </customer>
</customers>
下面是用于解析这个xml文件的java代码,文件名为XMLfileReader.java
import javax.xml.parsers.*;
import org.w3c.dom.*;
import java.io.File;
import javax.xml.transform.dom.DOMSource;
import org.xml.sax.*;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.*;
/**
 * @author xhinker
 */
public class XMLfileReader {
    /**
     *解组xml,使之成为Document对象
     */
    public Document XMLParse(){
        //建立解析器工厂
        DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
        Document doc=null;
        try {
            DocumentBuilder db=dbf.newDocumentBuilder();
            File file=new File("AnewXMLfile.xml");
            doc=db.parse(file);//解析xml文件
        } catch (Exception e) {}
        return doc;
    }
    /**
     *显示Docuument对象里的内容
     */
    public void XMLreader(Document doc){     
        try {
            System.out.println("haha");
            NodeList nl=doc.getElementsByTagName("customer");
            int len=nl.getLength();
            for(int i=0;i<len;i++){
                Element customer=(Element)nl.item(i);
                Node id=customer.getElementsByTagName("id").item(0);
                Node name=customer.getElementsByTagName("name").item(0);
                Node address=customer.getElementsByTagName("address").item(0);
                String newid=id.getFirstChild().getNodeValue();
                String newname=name.getFirstChild().getNodeValue();
                String newAddress=address.getFirstChild().getNodeValue();
                System.out.print("id\u53F7:");
                System.out.println(newid);
                System.out.print("\u540D\u5B57:");
                System.out.println(newname);
                System.out.print("\u5730\u5740");
                System.out.println(newAddress);    
            }
        } catch (Exception e) {}
    }
    /**
     *为Document对象里添加内容
     *@param doc Document类型对象
     */
    public void add(Document doc){
        try {
            Element customer=doc.createElement("customer");
            Element id=doc.createElement("id");
            Element name=doc.createElement("name");
            Element address=doc.createElement("address");
           
            Text textId=doc.createTextNode("005");
            Text textName=doc.createTextNode("zhushudong");
            Text textAddress=doc.createTextNode("haerbin");
           
            id.appendChild(textId);
            name.appendChild(textName);
            address.appendChild(textAddress);
           
            customer.appendChild(id);
            customer.appendChild(name);
            customer.appendChild(address);
           
            Element root=doc.getDocumentElement();
            root.appendChild(customer);          
        } catch (Exception e) {}
    }
    /**
     *删除结点
     *@param doc Document对象
     *@param i 用于指示要删除结点位置
     */
    public void delete(Document doc,int i){
        NodeList nl=doc.getElementsByTagName("customer");
        Node nodeDel=nl.item(i);
        nodeDel.getParentNode().removeChild(nodeDel);
    }
    /**
     *改变节点的值
     *@param doc 传入的对象
     *@param i 用于指示要修改结点位置
     *@param attr 要修改节点的标记
     *@param newValue 修改后的值
     */
    public void change(Document doc,int i,String attr,String newValue){
        NodeList nl=doc.getElementsByTagName("customer");
        Element cha=(Element)nl.item(i);
        Node nodeForCha=cha.getElementsByTagName(attr).item(0);
        nodeForCha.getFirstChild().setNodeValue(newValue);
    }
    /**
     *将java对象转化成xml文件
     *@param doc 要转化的java对象
     */
    public void ObjectToXML(Document doc)throws TransformerConfigurationException{
        try {
            //利用文档节点创建一个DOM输入源
            DOMSource source=new DOMSource(doc);
            //以newXMLfile.xml创建一个StreamResult对象
            StreamResult result=new StreamResult(new File("newXMLfile.xml"));
            //创建转换器工厂对象
            TransformerFactory tff=TransformerFactory.newInstance();
            //创建转换器对象
            Transformer tf=tff.newTransformer();
            //进行转换
            tf.transform(source, result);
        } catch (Exception e) {}
    }
    public static void main(String[] args){   
        XMLfileReader xmlReader=new XMLfileReader();
        Document newdoc=xmlReader.XMLParse();
        System.out.println("-----display------");
        xmlReader.XMLreader(newdoc);
        xmlReader.add(newdoc);
        System.out.println("-------add to last--------");
        xmlReader.XMLreader(newdoc);
        xmlReader.delete(newdoc, 0);
        System.out.println("-----delete the first node-------");
        xmlReader.XMLreader(newdoc);
        xmlReader.change(newdoc,0,new String("name"),new String("zhushudong2"));
        System.out.println("-----change the first node-------");
        xmlReader.XMLreader(newdoc);
        try {
            xmlReader.ObjectToXML(newdoc);
        } catch (Exception e) {}
    }
}



本文转自 xhinkerx 51CTO博客,原文链接:http://blog.51cto.com/xhinker/133071,如需转载请自行联系原作者
目录
相关文章
|
10月前
|
机器学习/深度学习 JSON Java
Java调用Python的5种实用方案:从简单到进阶的全场景解析
在机器学习与大数据融合背景下,Java与Python协同开发成为企业常见需求。本文通过真实案例解析5种主流调用方案,涵盖脚本调用到微服务架构,助力开发者根据业务场景选择最优方案,提升开发效率与系统性能。
2188 0
|
10月前
|
Java
Java的CAS机制深度解析
CAS(Compare-And-Swap)是并发编程中的原子操作,用于实现多线程环境下的无锁数据同步。它通过比较内存值与预期值,决定是否更新值,从而避免锁的使用。CAS广泛应用于Java的原子类和并发包中,如AtomicInteger和ConcurrentHashMap,提升了并发性能。尽管CAS具有高性能、无死锁等优点,但也存在ABA问题、循环开销大及仅支持单变量原子操作等缺点。合理使用CAS,结合实际场景选择同步机制,能有效提升程序性能。
|
10月前
|
Java 开发者
Java并发编程:CountDownLatch实战解析
Java并发编程:CountDownLatch实战解析
628 100
|
11月前
|
存储 缓存 Java
Java数组全解析:一维、多维与内存模型
本文深入解析Java数组的内存布局与操作技巧,涵盖一维及多维数组的声明、初始化、内存模型,以及数组常见陷阱和性能优化。通过图文结合的方式帮助开发者彻底理解数组本质,并提供Arrays工具类的实用方法与面试高频问题解析,助你掌握数组核心知识,避免常见错误。
|
11月前
|
缓存 安全 Java
Java并发性能优化|读写锁与互斥锁解析
本文深入解析Java中两种核心锁机制——互斥锁与读写锁,通过概念对比、代码示例及性能测试,揭示其适用场景。互斥锁适用于写多或强一致性场景,读写锁则在读多写少时显著提升并发性能。结合锁降级、公平模式等高级特性,助你编写高效稳定的并发程序。
482 0
|
9月前
|
存储 安全 Java
《数据之美》:Java集合框架全景解析
Java集合框架是数据管理的核心工具,涵盖List、Set、Map等体系,提供丰富接口与实现类,支持高效的数据操作与算法处理。
|
10月前
|
Java 开发者
Java 函数式编程全解析:静态方法引用、实例方法引用、特定类型方法引用与构造器引用实战教程
本文介绍Java 8函数式编程中的四种方法引用:静态、实例、特定类型及构造器引用,通过简洁示例演示其用法,帮助开发者提升代码可读性与简洁性。
|
10月前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
1575 1
|
9月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
9月前
|
XML 数据采集 API
用Lxml高效解析XML格式数据:以天气API为例
免费Python教程:实战解析中国天气网XML数据,详解Lxml库高效解析技巧、XPath用法、流式处理大文件及IP封禁应对策略,助你构建稳定数据采集系统。
436 0

推荐镜像

更多
  • DNS