繁体中文
设为首页
加入收藏
当前位置:JSP技术首页 >> Java与XML >> xml文件操作的java程序(续)

xml文件操作的java程序(续)

2004-10-01 08:26:10  作者:  来源:互联网  浏览次数:48  文字大小:【】【】【
简介:/**      * helper方法,查找一个指定的元素      *      * @param name 元素名称,格式为 X.Y.Z      ...
关键字:文件 程序 java xml

/**

* helper方法,查找一个指定的元素

*

* @param name 元素名称,格式为 X.Y.Z

* @return Element 如果找到就返回这个元素,否则返回null

*/

public Element findOnly(String name)

{

//分解元素的名称

String[] propName = parsePropertyName(name);

Element element = this.doc.getRootElement();

//遍历搜索匹配的元素

for (int i = 0; i < propName.length; i++)

{

element = element.getChild(propName[i]);

if(element == null) return null;

}

//找到啦!

return element;

}

/**

* Saves the properties to disk as an XML document. A temporary file is

* used during the writing process for maximum safety.

*/

public synchronized void saveProperties() {

OutputStream out = null;

boolean error = false;

// Write data out to a temporary file first.

File tempFile = null;

try {

tempFile = new File(file.getParentFile(), file.getName() + ".tmp");

// Use JDOM's XMLOutputter to do the writing and formatting. The

// file should always come out pretty-printed.

//增加此行使得支持中文 wyl 20021015

XMLOutputter outputter = new XMLOutputter("", true,"GB2312");

out = new BufferedOutputStream(new FileOutputStream(tempFile));

//增加此行,使得xml文件没有空行。 wyl 20021030

outputter.setTextNormalize(true);

outputter.output(doc, out);

}

catch (Exception e) {

e.printStackTrace();

// There were errors so abort replacing the old property file.

error = true;

}

finally {

try { out.close(); }

catch (Exception e) {

e.printStackTrace();

error = true;

}

}

// No errors occured, so we should be safe in replacing the old

if (!error) {

// Delete the old file so we can replace it.

if (!file.delete()) {

System.err.println("Error deleting property file: " +

file.getAbsolutePath());

return;

}

// Rename the temp file. The delete and rename won't be an

// automic operation, but we should be pretty safe in general.

// At the very least, the temp file should remain in some form.

if (!tempFile.renameTo(file)) {

System.err.println("Error renaming temp file from " +

tempFile.getAbsolutePath() + " to " + file.getAbsolutePath());

}

}

}

/**

* Returns an array representation of the given crm property. crm

* properties are always in the format "prop.name.is.this" which would be

* represented as an array of four Strings.

*

* @param name the name of the crm property.

* @return an array representation of the given crm property.

*/

public String[] parsePropertyName(String name) {

// Figure out the number of parts of the name (this becomes the size

// of the resulting array).

int size = 1;

for (int i=0; i

if (name.charAt(i) == '.') {

size++;

}

}

String[] propName = new String[size];

// Use a StringTokenizer to tokenize the property name.

StringTokenizer tokenizer = new StringTokenizer(name, ".");

int i = 0;

while (tokenizer.hasMoreTokens()) {

propName[i] = tokenizer.nextToken();

i++;

}

return propName;

}

private String[] parseAttributeName(String name)

{

// Figure out the number of parts of the name (this becomes the size

// of the resulting array).

if(name==null) return null;

int size = 1;

for (int i=0; i

{

if (name.charAt(i) == '=')

{

size++;

}

}

if(size!=2) return null;

String[] attrName = new String[size];

// Use a StringTokenizer to tokenize the property name.

StringTokenizer tokenizer = new StringTokenizer(name, "=");

for(int i=0;tokenizer.hasMoreTokens();i++)

attrName[i] = tokenizer.nextToken();

return attrName;

}

/**

* @param element element==null start from root

* @param attName attribute name

* @return attribute value of this element

* @author qiuss

* @date 2001.11.08

*/

public String getAttribute(Element element,String attName)

{

if(attName==null) return null;

// Search for this property by traversing down the XML heirarchy.

if(element==null) element = doc.getRootElement();

Attribute att;

String value;

if((att=element.getAttribute(attName))!=null)

value = att.getValue();

else

return null;

if ("".equals(value))

{

return null;

}

else

{

return value.trim();

}

}

// qiuss 2001.11.08

public String getAttribute(String eleName,String attName)

{

String[] propName = parsePropertyName(eleName);

// Search for this property by traversing down the XML heirarchy.

Element element = doc.getRootElement();

for (int i = 0; i < propName.length; i++)

{

element = element.getChild(propName[i]);

if (element == null)

{

// This node doesn't match this part of the property name which

// indicates this property doesn't exist so return null.

return null;

}

}

// At this point, we found a matching property, so return its value.

// Empty strings are returned as null.

String value ="";

try{

value= element.getAttribute(attName).getValue();

}

catch(Exception e)

{

value ="";

}

if ("".equals(value))

{

return "";

}

else

{

return value.trim();

}

}

public static void main(String[] args)

{

XMLProperty xmltree = new XMLProperty("D:/project/bicp-ivr/crm_config.xml");

//存在则更改元素的属性值

xmltree.setProperty("system.connection.username2","type","中文测试");

//不存在则新建一个元素

xmltree.setProperty("system.connection.用户名称","ecom4");

xmltree.setProperty("system.connection.用户名称","type","中文测试2222");

//删除一个xml

// xmltree.deleteProperty("system.connection.username2");

String db_url= xmltree.getProperty("system.connection.db_url");

String db_url_id="";

db_url_id=xmltree.getAttribute("system.information.db_url","remark");

Debug.println("db_url="+db_url);

Debug.println("db_url_id="+db_url_id);

// String names[] = xmltree.parsePropertyName("style.body");

// for(int i=0;i

// {

// Debug.println("i="+i+" "+names[i]);

// }

String child[] = xmltree.getChildrenProperties("style.body");

for(int j=0;j

{

Debug.println("j="+j+" "+child[j]);

String child2[]= xmltree.getChildrenProperties("system.tracelog."+child[j]);

for(int k=0;k

{

Debug.println("k="+k+" "+child2[k]);

}

}

//System.out.println("Hello World!");

}

}

责任编辑:admin
相关文章