当前位置:  技术问答>java相关

如何修改xml中的内容

    来源: 互联网  发布时间:2015-11-20

    本文导语:     one    d:/xml    two    e:/two ------------------------------------  会有很多项,如何修改one, two, 并且可以增加删除 | package util.common; import java.io.*; import java.util.*; import org.jdom.*; import org.jdom.input.*;...


   one
   d:/xml


   two
   e:/two

------------------------------------
 会有很多项,如何修改one, two,
并且可以增加删除

|
package util.common;

import java.io.*;
import java.util.*;


import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;


public class XMLProperties
{
    private boolean autoSave = true;
    private File file;
    private Document doc;
    private Map propertyCache = new HashMap();

    public XMLProperties(String file, boolean autoSave, boolean validate)
            throws JDOMException
    {
        this.autoSave = autoSave;
        this.file = new File(file);
        SAXBuilder builder = new SAXBuilder(validate);
        try
        {
            doc = builder.build(file);
        }
        catch (JDOMException ex)
        {
            throw new JDOMException("构造过程出现错误! " + ex);
        }
    }

    public XMLProperties(String file, boolean autoSave)   throws JDOMException
    {
        this(file, autoSave, false);
    }

    public XMLProperties(String file)   throws JDOMException
    {
        this(file, false, false);
    }
    
    public boolean isAutoSave() {  return autoSave; }

    public void setAutoSave(boolean autoSave)   {   this.autoSave = autoSave;   }

    public synchronized void saveProperties() throws IOException
    {
        if(autoSave == false)   return;

        XMLOutputter out = new XMLOutputter("    ",true, "GB2312");
        File temp = null;
        FileWriter writer = null;
        boolean isError = false;
        try
        {
            //先生成一个临时文件
            temp = new File(file.getParent(), file.getName() + ".tmp");
            writer = new FileWriter(temp);
            out.output(doc, writer);
        }
        catch (IOException ex)
        {
            isError = true;
            throw new IOException("生成临时文件出现错误!" + ex);
        }
        finally
        {
            writer.close();
        }
        //备份源文件,生成新文件
        if(isError == false)
        {
            File bak = new File(file.getParent(), file.getName() + ".bak");
            //删除原来的备份文件
            if(bak.exists())    bak.delete();
            boolean isSuccess = file.renameTo(bak);
            file.delete();
            //临时文件变成正式文件
            isSuccess = temp.renameTo(file);
            if(isSuccess == false)
                throw new IOException("备份文件过程出现错误!");
        }
    }

    public String getPorperty(String name)
    {
        if(propertyCache.containsKey(name))
            return propertyCache.get(name).toString();

        //查找指定的元素元素
        Element element = this.findOnly(name);
        if(element == null) return null;

        String value = element.getTextTrim();
        propertyCache.put(name, value);
        return value;
    }

    public String getPorperty(String name, String attr)
    {
        String nameAttr = name + ":" + attr;
        if(propertyCache.containsKey(nameAttr))
            return propertyCache.get(nameAttr).toString();

        //查找指定的元素元素
        Element element = this.findOnly(name);
        if(element == null) return null;

        String value = element.getAttributeValue(attr);
        propertyCache.put(nameAttr, value);
        return value;
    }

    public void setProperty(String name, String value) throws IOException
    {
        propertyCache.put(name, value);

        //查找指定的元素元素
        Element element = this.findCreate(name);
        element.setText(value);
        saveProperties();
    }
    
    public void setProperty(String name, String attr, String value) throws IOException
    {
        String nameAttr = name + ":" + attr;
        propertyCache.put(nameAttr, value);

        //查找指定的元素元素
        Element element = this.findCreate(name);
        element.setAttribute(attr, value);
        saveProperties();
    }

    public void deleteProperty(String name) throws IOException
    {
        if(propertyCache.containsKey(name))
            propertyCache.remove(name);

        Element element = this.findOnly(name);
        if(element != null)  element.detach();
        saveProperties();
    }

    public void deleteProperty(String name, String attr) throws IOException
    {
        String nameAttr = name + ":" + attr;
        if(propertyCache.containsKey(nameAttr))
            propertyCache.remove(nameAttr);

        Element element = this.findOnly(name);
        if(element != null) element.removeAttribute(attr);
        saveProperties();
    }

    public String[] getChildrenProperties(String parent)
    {
        //分解元素的名称
        String[] propName = parsePropertyName(parent);
        Element element = doc.getRootElement();
        //遍历搜索匹配的元素
        for (int i = 0; i 

    
 
 

您可能感兴趣的文章:

  • 修改ip地址的话应该修改/ect下哪个文件里的内容?
  • unix 下 C++实现 ftp 到另一台主机上 修改文件内容 !能不能直接在主机上修改 还是只能get下来本地修改完后 在put上去
  • linux命令行模式下如何修改文件内容
  • 怎么对文件的内容进行修改?
  • linux 下如何修改文件名,文件内容
  • 修改ip地址的话应该修改/ect下哪个文件里的内容? iis7站长之家
  • 有什么方法可以修改 linux 的 grub 的“操作系统选择菜单”内容
  • 怎样修改/proc下文件内容?
  • [求助]修改文件内容
  • 如何修改/proc/version的内容
  • 写一个主目录下修改文件内容,用守护进程把这个动作写在日志上
  • Linux脚本语言修改文件里的内容
  • 请问一下如何用shell脚本来修改文件的内容?
  • 修改文件内容
  • sed -i 修改文件内容
  • 为什么经常修改了jsp文件后,调用的还是原来没有改动的内容?我重起了tomcat甚至机器!
  • 请问用脚本shell怎么修改文件中的内容?
  • jsp页面怎么禁止修改text里面的内容??
  • 求一个批量修改内容命令
  • 着急ing,用什么工具可以在windows下面修改ext3盘里面的内容?
  • 使用linq to xml修改app.config示例(linq读取xml)
  • 用UltraEdit打开tomcat的server.xml或web.xml或自己程序的web.xml,修改保存完毕后,总是弹出错误提示:"0x70c70c99"指令引用的"0x00000008"
  • XML批量修改工具 XMLPatch
  • linux下批量修改xml文件内容
  • 为什么调试servet每次都要重起服务器,是不是要在tomcat下的server.xml修改服务器虚拟目录的属性,,
  • 如何用shell脚本修改XML文件
  • win2000, tomcat 4.0 我修改server.xml,(改端口等) 只能重起win2000才能生效,用start tomcat 和stop tomcat都不行,how can i do?
  • 谁告诉我如何使用java创建,分析,修改一个xml,给我例子
  • 实战EJB之四(开发实体CMP),在部署应用程序的时候,点击"实体EJB的持续性管理",”在设置数据源的JNDI名时,如何修改datasources.xml来
  • asp.net xml文件的读写、添加、修改、删除操作示例
  • c#操作xml的代码(插入节点、修改节点、删除节点等)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 修改Windows硬盘分区名称
  • 高手帮帮忙!!! 在线等!!outlook的附件修改且保存后,再次打开发现是修改之前的原件
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • 原密码被人恶意修改,如何修改suse系统的超级用户密码(急)
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • 有什么命令可以修改整个目录下文件的最后修改时间?
  • mysql中如何查看最大连接数(max_connections)和修改最大连接数
  • 请教一下,如何修改ubuntu命令,使其可以直接修改kvm虚拟机配置
  • sharepoint 2010中item.Update()和item.SystemUpdate 修改数据版本问题解决
  • shell 程序监控网站网页是否被修改,如果被修改停止服务器的运行?
  • 通过docker commit命令保存对docker容器的修改
  • 请教下关于root密码忘记了怎么修改(除了去现场单用户修改)
  • linux/Centos下查看和修改网卡Mac地址(ifconfig命令)
  • [fedora]下怎么修改MAC地址,并且要重新动的时候还是修改后的值。
  • linux/Centos/ubuntu下如何使用umask命令修改新建文件时的默认权限
  • 哪个DOS命令可以修改指定文件的时间(修改时间)?
  • windows/windows 7/windows 8 下打开查看、修改及保存超大(GB级)文本文件及其它类型文件的工具-PilotEdit
  • ◆◆◆◆遇到这样一个问题,请帮忙修改修改.
  • 本来可以修改skb里tcp数据的,突然不能修改了,为什么?
  • 急,请问如何修改网络接口eth为其它名称,如网络接口为abc0, abc1,要修改哪个配置文件?
  • 用touch命令修改访问时间时,却发现连修改时间和状态时间也改了.疑惑


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3