在主函数中调用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>
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>
<BusinessCodeConfig Name="公积金查询" Code="H00001Industry0000" />
!!添加到此处!! </BusinessCode> ========================
貌似你的节点关键字和属性名称贴在一起了。
<BusinessCodeConfig Name="公积金查询" Code="H00001Industry0000" />
------------||----------------------</BusinessCode>
//这段代码应该是找到某个结点。
Element e=jj.jdomFind("BusinessCode", route);
//按你贴出来的XML,应该找不到“BusinessCode”的,因为只有“BusinessCodeConfig ”
所以我自己写了一个:
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。
<BusinessCode>
<!--表示一个业务代码-->
<BusinessCodeConfig Name="公积金查询" Code="H00001Industry0000"></BusinessCodeConfig>
<kak Name="住房基金" Code="A000000000000001"></kak>
<kak Name="住房基金" Code="A000000000000001"></kak>
</BusinessCode>
说明逻辑是对的,问题出在你的写入XML那部分。
我试改改看。