在主函数中调用jdomApp 类jdomAddElement 方法 对 XMLFile1.xml文件进行插入操作。但插入后文件没有改变。没有出现错误信息。请各位多多帮忙。急!!!!
package com.gzwl.sun.form;
import java.io.IOException;
import java.util.List;
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 com.gzwl.sun.form.jdomApp;
public class tmain { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
String root="main";
String content="content";
String contentText="mainxml";
String route="D:/sja/INT-xml/XMLFile1.xml";
jdomApp jj=new jdomApp();
jj.inintjdomApp(root, content, contentText,route);
   

Element e=jj.jdomFind("BusinessCode", route);
List<Element> lt=e.getChildren();
String Code="A000000000000001";
String Name="住房基金";
String childElement[][]={{"Name","住房基金"},{"Code","A000000000000001"}};
boolean f=false;
for(Element elm:lt){
System.out.println("1");
if(!Code.equals(elm.getAttribute("Code").getValue())){
System.out.println("asdf");
//jj.jdomAddElement(jj.getjdomDocument() ,e,"BusinessCodeConfig",childElement, route);
f=true;

}

}
System.out.println("f="+f);
if(f){
System.out.println("ok");
System.out.println(jj.getjdomDocument());
jj.jdomAddElement(jj.getjdomDocument() ,e,"BusinessCodeConfig",childElement, route);
}

   
}}
package com.gzwl.sun.form;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;import org.jdom.Attribute;
import org.jdom.Comment;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.Namespace;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.jdom.*;import   java.io.File;
public class jdomApp {
Element rootElement;
Document myDocument;
FileWriter writer;
XMLOutputter xmlOut;
SAXBuilder sb;
FileInputStream file;

Document getjdomDocument(){
return myDocument;
}
/*
 * 初始化 Document 对象用于获得指定或新建的xml文件
 * inintjdomApp方法
 * root 根元素 
 * content 根元素的content
 * contentText 根元素的content 值
 * route xml文件所在位置
 * */
public void inintjdomApp(String root,String content,String contentText,String route){
File   dir   =   new   File(route);   
  if(dir.exists()) {  //文件存在
  System.out.println("The   file   exist");   
   try{
SAXBuilder builder = new SAXBuilder();
    FileInputStream file = new FileInputStream(route);
Document document = builder.build(file);//获取文档对象
this.myDocument=document;
file.close();
builder=null;

}catch (IOException e) {

e.printStackTrace();
} catch (JDOMException e) {

e.printStackTrace();
}
  } else {   //文件不存在,新建xml文档
  System.out.println("The   file   is   not   exist new one ");
  rootElement = new Element(root);
  myDocument = new Document(rootElement);
         rootElement.setAttribute(content,contentText);
  rootElement.setAttribute("id","0");//设置根元素id初值
try{
writer = new FileWriter(route);
xmlOut = new XMLOutputter(Format.getPrettyFormat());
   
xmlOut.output(myDocument, writer);
xmlOut.clone();

}catch(Exception e){
e.printStackTrace();
}
  
  }

}
/*
 * jdomAddElement方法
 * myDocument xml文件对象
 * elementName 元素名称
 * childElement[][] n*2字符串数组
 *  一维用于存放元素名。
 *  二维用于存放元素text
 *  route xml文件所在位置
 * */
   
   /*
    * 插入
    */
   void jdomAddElement(Document myDocument,Element el,String elementName ,String [][]childElement,String route){/*添加元素*/
   try{
  // System.out.println(route);
   rootElement =myDocument.getRootElement() ;//获得root 元素
   Element eadd=el;
   List allChildren=el.getChildren();
   System.out.print(eadd);
    Element element = new Element("kak");
  for(int i=0;i<childElement.length;i++){
  element.setAttribute(childElement[i][0].trim(),childElement[i][1].trim());
  
}

  eadd.addContent(element);

 FileOutputStream out=new FileOutputStream(route);  
  XMLOutputter outputter = new XMLOutputter(); 
  
  Format f = Format.getPrettyFormat();  f.setEncoding("UTF-8");//default=UTF-8  outputter.setFormat(f); 
outputter.output(myDocument, out); 
out.close(); 
  
   }catch(Exception e){
   System.out.println("err"); 
 e.printStackTrace();
 }
}
            } 
   
   
}xml 文件
<?xml version="1.0" encoding="utf-8" ?>
<!--脚本根元素,ScriptCount(包含的脚本业务个数)-->
<EnterpriseSMScript ScriptCount="1">
<!--数据库所有连接保存-->
<DBConnectionConfig>
<!--表示一个数据库连接,DBConnectionKey(数据库连接标识键),Description(连接描述)-->
<!--Name(连接名称),Style(数据库类型1-SQLSERVER,2-Oracle,3-Sybase,4-DB2,5-MySql)-->
<!--Server(数据库服务器地址),Port(端口),DataBaseName(连接的数据库的名字),UserID(数据连接用户名),Password(数据库连接密码)-->
<DBConnection DBConnectionKey="1" Description="测试连接1" Name="测试连接SQL" Style="1" Server="." Port="1433"
DataBaseName="Info" Userid="sa" Password="sa" />
<DBConnection DBConnectionKey="2" Description="测试连接2" Name="测试连接Oracle" Style="2" Server="." Port="1433"
DataBaseName="Info" Userid="sa" Password="sa" />
<DBConnection DBConnectionKey="3" Description="测试连接3" Name="测试连接Sybase" Style="3" Server="." Port="1433"
DataBaseName="Info" Userid="sa" Password="sa" />
<DBConnection DBConnectionKey="4" Description="测试连接4" Name="测试连接DB2" Style="4" Server="." Port="1433"
DataBaseName="Info" Userid="sa" Password="sa" />
<DBConnection DBConnectionKey="5" Description="测试连接5" Name="测试连接MySql" Style="5" Server="." Port="1433"
DataBaseName="Info" Userid="sa" Password="sa" />
</DBConnectionConfig>
<!--业务代码集合-->
<BusinessCode>
<!--表示一个业务代码-->
<BusinessCodeConfig Name="公积金查询" Code="H00001Industry0000" />
!!添加到此处!! </BusinessCode>

</EnterpriseSMScript>

解决方案 »

  1.   

    <!--表示一个业务代码--> 
    <BusinessCodeConfig Name="公积金查询" Code="H00001Industry0000" /> 
    !!添加到此处!! </BusinessCode> ========================
    貌似你的节点关键字和属性名称贴在一起了。
    <BusinessCodeConfig Name="公积金查询" Code="H00001Industry0000" /> 
    ------------||----------------------</BusinessCode> 
    //这段代码应该是找到某个结点。
    Element e=jj.jdomFind("BusinessCode", route); 
    //按你贴出来的XML,应该找不到“BusinessCode”的,因为只有“BusinessCodeConfig ” 
      

  2.   

    因为没有你的方法Element e=jj.jdomFind("BusinessCode", route); 描述,
    所以我自己写了一个:
    public Element jdomFind(String name, String route) {
    File dir = new File(route);
    if (!dir.exists()) { // 文件存在
    return null;
    }

    rootElement = myDocument.getRootElement();
    return rootElement.getChild(name);
    }
    运行后,又插入值。
    另外由于你在这里使用加强for循环for(Element elm:lt),有异常java.util.ConcurrentModificationException。
      

  3.   

    试了下你的代码,jdomAddElement()执行完后,XML的内容变成这样: <!--业务代码集合-->
      <BusinessCode>
      <!--表示一个业务代码-->
       <BusinessCodeConfig Name="公积金查询" Code="H00001Industry0000"></BusinessCodeConfig>
      <kak Name="住房基金" Code="A000000000000001"></kak>
      <kak Name="住房基金" Code="A000000000000001"></kak>
      </BusinessCode>
    说明逻辑是对的,问题出在你的写入XML那部分。
    我试改改看。