有关java用XML文件的配置

[b]这是一个共用的工具类,用于读取xml文件[/b]
//:com.huanglq.util.Configuration.java
[code]package com.huanglq.util;

/**
* @author huanglq
*用java本身提供的xml-api来解析xml文件(DOM)
* TODO 读取 xml文件的结点值
*/
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Configuration {
/**
* @param filePath xml文件路径
* @param parentTagName 要读取的结点的父结点
* @param name 要读取的结点名
* @return 结点值
*/
public static String getConfigValue(String filePath,String parentTagName,String name){
// String nodeValue[] =new String[2];
String nodeName ="";//节点名
String nodeValue="";//节点值
try {

NodeList list = xmlToDoc(filePath,parentTagName);

try {
//遍历文件的节点
for (int i = 0; i < list.getLength(); i++) {
Node n = list.item(i);// list.item(i);返回集合中的第 index 个项
NodeList child_nl = n.getChildNodes();//getChildNodes();返回包含此节点的所有子节点的 NodeList

//遍历根节点的子节点
for (int j = 0; j < child_nl.getLength(); j++) {
nodeValue ="";
//getNodeType() 表示基础对象的类型的节点,类型是short
//Node.TEXT_NODE该节点为 Text 节点(static short)
//节点类型不为short的
if (child_nl.item(j).getNodeType() != Node.TEXT_NODE) {
// 如果child_nl中有节点名为name
if(child_nl.item(j).getNodeName().trim().equals("name")){
//获得name节点中的值
nodeName = child_nl.item(j).getFirstChild().getNodeValue().trim();
}
//如果name节点中的值有等于传入的name的值,而且name节点下的节点名为value的
else if(nodeName.equals(name) && child_nl.item(j).getNodeName().trim().equals("value")){
//把name节点下的第一个节点名为value的值传给nodeValue
nodeValue = child_nl.item(j).getFirstChild().getNodeValue().trim();
break;
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception ex) {
ex.printStackTrace();
}
return nodeValue;
}

/* url 是xml文件的路径,tagName在这里是根节点下面的节点,
本方法返回tagName节点下的节点集*/
private static NodeList xmlToDoc(String url, String tagName) throws Exception {
DocumentBuilderFactory dbf = null;
DocumentBuilder db = null;
Document doc = null;
NodeList n1 = null;

dbf = DocumentBuilderFactory.newInstance();
db = dbf.newDocumentBuilder();
doc = db.parse(url);
n1 = doc.getElementsByTagName(tagName);
// getElementsByTagName(tagName)按文档顺序返回包含在文档中且具有给定标记名称的所有 Element 的 NodeList
return n1;
}

//测试
public static void main(String args[]){
String a =getConfigValue("refeshKeyword.xml","refeshKeyword","Server2");
//这里返回节点为refeshKeyword下name为Server2的value
System.out.print(a+"----");
}
}[/code]
///:~
xml文件可以随便写个,这里只是个例子
测试中xml文件:refeshKeyword.xml
[code]<?xml version="1.0" encoding="GBK" standalone="no"?>

<refesh>
<database>
<name>drive</name>
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
<name>url</name>
<value>jdbc:microsoft:sqlserver://localhost1433;DatabaseName=huanglq_Query</value>
<name>url2</name>
<value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=huanglq_Other</value>
<name>username</name>
<value>xxxxxxxxxx</value>
<nampassword</name>
<value>xxxxxxxxx</value>
</database>
<refeshKeyword>
<name>Top</name>
<value>500</value>
<name>ServerCount</name>
<value>2</value>
<name>Server1</name>
<value>/usr/work/keyword.txt</value>
<name>Server2</name>
<value>/usr/work2/keyword.txt</value>
<name>TxtCount</name>
<value>2</value>
<name>Txt1</name>
<value>/usr/work3/keywordXX.txt</value>
<name>Txt2</name>
<value>/usr/work4/keywordXX.txt</value>
</refeshKeyword>
</refesh>[/code]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值