优雅天平

享受喧嚣 安于平静
posts(18) comments(167) trackbacks(0)
  • BlogJava
  • 联系
  • RSS 2.0 Feed 聚合
  • 管理

常用链接

  • 我的随笔
  • 我的评论
  • 我的参与
  • 最新评论

留言簿

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔档案(18)

  • 2006年4月 (1)
  • 2006年3月 (1)
  • 2005年12月 (3)
  • 2005年10月 (2)
  • 2005年9月 (1)
  • 2005年7月 (2)
  • 2005年6月 (3)
  • 2005年3月 (2)
  • 2005年2月 (3)

文章分类(62)

  •  eclipse(2)
  •  Guitar(11)
  •  J2EE相关(5)
  •  JAVA基础(7)
  •  Solaris相关(1)
  •  WAP相关(1)
  •  web services(12)
  •  web页面基础(4)
  •  开源相关(16)
  •  数据库/仓库(2)
  •  模式相关(1)

文章档案(61)

  • 2006年2月 (1)
  • 2006年1月 (3)
  • 2005年12月 (32)
  • 2005年11月 (8)
  • 2005年9月 (6)
  • 2005年8月 (1)
  • 2005年6月 (6)
  • 2005年5月 (1)
  • 2005年3月 (1)
  • 2005年2月 (2)

相册

  • 大事记
  • 我的照片

blog

  • 小江西
  • 铁手剑谱的blog-strust
  • 陶永胜书法艺术中心

站点搜藏

  • Matrix-与Java共舞
  • OpenSource
  • 中国java开发网

搜索

  •  

积分与排名

  • 积分 - 142692
  • 排名 - 437

最新评论

  • 1. re: JFreeChart完全攻略示例各种方法和属性[未登录]
  • sdfg
  • --111
  • 2. re: JFreeChart完全攻略示例各种方法和属性
  • 分数线烦不烦很舒服发个号发给合适的给他发所提供合适的土壤规范不能是纳税人他呢过生日能接受洒脱人呢是vae回复身体然后呢托管人粉红丝带让他反感 受托人复活币善待他人回事
  • --倒萨倒
  • 3. re: Jcreator注册码[未登录]
  • 有谁有jcreator 5.0 pro的注册码呀?跪求
  • --liu
  • 4. re: 开启log4j的记录源代码行号的配置,会对系统性能产生影响!
  • 怎么说呢?理解的有点片面。。。jdk1.4之前的话的确对性能影响比较大,自从1.4开始引入了StackTraceElement之后,对性能影响不是那么大。。。
  • --黄大仙
  • 5. re: 请问MYECLIPSE在哪里输入注册码呀?[未登录]
  • 对我这个初学者有帮助,嘿嘿。
  • --Flyer

阅读排行榜

  • 1. Jcreator注册码(22639)
  • 2. java日期相减问题(20246)
  • 3. Myeclipse注册码(13945)
  • 4. jbuilder 2006 破解文件(13716)
  • 5. 修改 Oracle9i 8080端口问题(2888)

评论排行榜

  • 1. jbuilder 2006 破解文件(58)
  • 2. Jcreator注册码(50)
  • 3. Myeclipse注册码(18)
  • 4. JBuilder2005光标问题更好的解决方法(6)
  • 5. B/S结构程序等待查询结果超时问题(5)

View Post

Java读取XML文件的工具类

如果我们有下面的一个XML文件,可以把它想象成一个Relation Database中的Table, 这个XML文件就是一个名字为managers的关系表,而一个<manager>所包含的就是一条记录(Record),而manager中的service和implementation就是一个个的栏位(Field) !

managers table
 +  service implementation
net.csdn.blog.xport.IDBConnectionManager net.csdn.blog.xport.impl.DBConnectionManagerCommonImpl
net.csdn.blog.xport.IDomainIdentify net.csdn.blog.xport.impl.DomainIdentifyImpl

所以,在程序中,可以用类似Table Query的方式来读取XML节点(Node)上面的属性值!

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE managers SYSTEM "manager-config.dtd">
<managers>
<manager name="DBConnectionManager" >
<service>net.csdn.blog.xport.IDBConnectionManager</service>
<implementation>net.csdn.blog.xport.impl.DBConnectionManagerCommonImpl</implementation>
</manager>
<manager name="NTAccountIdendify" >
<service>net.csdn.blog.xport.IDomainIdentify</service>
<implementation>net.csdn.blog.xport.impl.DomainIdentifyImpl</implementation>
</manager>
</managers>

按照下面的代码读取:

// 查找以manager作为tag标记,属性中存在name且属性值为"DBConnectionManager"的
// XML节点, 并返回此节点的DOM Element对象!
// 类似name字段为PK值,且name="DBConnectionManager"
managerElement
= XMLFileUtil.findElement(xmlDomContent.getRootElement(),
"manager",
"name",
"DBConnectionManager");
if (managerElement != null) {
//取得Element中的implementation属性对象...
serviceImplElement = managerElement.element("implementation");
if (serviceImplElement != null) {
//取这个属性的值...
serviceImplClassString = serviceImplElement.getText();
}
}

Source of XML Utility Class:

/*

* @(#)XMLFileUtil.java 1.0 2004/12/20
*
* Copyright 2004 Shark Wang, All rights reserved.

*/

package net.csdn.blog.xport;

import java.net.URL;
import java.util.Iterator;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

/**
* The <code>XmlUtil</code> class supported your code to read/write xml
* data from the file. all methods in this class depend on <code>dom4j</code>.
*
*
@author Shark Wang
*
@version 1.0, 2004/12/20
*
@since Tutorial 1.0
*/

public class XMLFileUtil {

private static Logger logger = LogManager.getLogger(XMLFileUtil.class);

/**
* read xml content from some file, and load xml data into the
* Document object.
*
*
@param filePath String
*
@return Document
*/

public static Document LoadXmlFile(String filePath) {

/* marked by Shark Wang
*****************************************************************
//get resolver to ignore the DTD validation
EntityResolver resolver = new EntityResolver() {
public InputSource resolveEntity(String publicId,
String systemId) {
return new InputSource(new StringBufferInputStream(""));
}
};
//create reader
SAXReader reader = new SAXReader();
//set reader attribute to ignore DTD validation
reader.setEntityResolver(resolver);
reader.setValidation(false);
reader.setIncludeExternalDTDDeclarations(false);
reader.setIncludeInternalDTDDeclarations(false);
*******************************************************************
*/

SAXReader reader =
new SAXReader();
//try to load xml data into Document object
Document doc = null;
try {
String urlString =
null;
if (filePath.startsWith("/")) {
urlString = "file://" + filePath;
}
else {
urlString = "file:///" + filePath;
}
logger.debug("XML File's URL :" + urlString);
doc = reader.read(
new URL(urlString));
}
catch (Exception ex) {
logger.info("Can not load " + filePath);
logger.debug(ex.getMessage(), ex);
}
//return Document object
return doc;
}

/**
* Get attribute value by name for some xml element.
*
*
@param element Element
*
@param attributeName String
*
@return String
*/

public static String getAttributeValue(Element element,
String attributeName) {
String attributeValue =
null;
for (Iterator i = element.attributeIterator(); i.hasNext(); ) {
Attribute attribute = (Attribute) i.next();
if (attribute.getName().equals(attributeName)) {
attributeValue = (String) attribute.getData();
break;
}
}
return attributeValue;
}

public static Element findElement(Element searchedElement,
String targetNodePrefix,
String targetNodeAttributeName,
String targetNodeAttributeValue) {
Element elementTarget =
null;
for (Iterator i = searchedElement.elementIterator(targetNodePrefix);
i.hasNext(); ) {
Element element = (Element) i.next();
String strManagerName =
XMLFileUtil.getAttributeValue(element,
targetNodeAttributeName);
if (strManagerName.equals(targetNodeAttributeValue)) {
elementTarget = element;
break;
}
}
return elementTarget;
}

private XMLFileUtil() {
}
}

posted on 2005-12-09 11:11 Victor 阅读(2611) 评论(0)  编辑  收藏 所属分类: JAVA基础

新用户注册  刷新评论列表  

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问   管理
相关文章:
  • Java初学者容易混淆的几个问题
  • Java读取XML文件的工具类
  • JSP中早就有了类似.Net DataSet那样的离线数据访问了,抛弃ResultSet,拥抱Result吧!
  • java中文问题详解(转)
  • 最安全的加密算法 (摘自温少的blog)
  • JSP编程进度条设计实例(转)
  • Java 编程技术中汉字问题的分析及解决(转)
 
 
Powered by:
BlogJava
Copyright © Victor