您的位置:首页 > 编程语言 > Java开发

写了一个Java读取XML文件的工具类,做一下笔记!

2008-04-01 18:29 441 查看
.CodeFormat {font-family:"Courier New", Courier, mono; font-size:9pt; }如果我们有下面的一个XML文件,可以把它想象成一个Relation Database中的Table, 这个XML文件就是一个名字为managers的关系表,而一个所包含的就是一条记录(Record),而manager中的service和implementation就是一个个的栏位(Field) !

managers table
 + serviceimplementation
net.csdn.blog.xport.IDBConnectionManagernet.csdn.blog.xport.impl.DBConnectionManagerCommonImpl
net.csdn.blog.xport.IDomainIdentifynet.csdn.blog.xport.impl.DomainIdentifyImpl
所以,在程序中,可以用类似Table Query的方式来读取XML节点(Node)上面的属性值!


<managers>
  name="DBConnectionManager" >
    net.csdn.blog.xport.IDBConnectionManager
    <implementation>net.csdn.blog.xport.impl.DBConnectionManagerCommonImpl
  
  
        net.csdn.blog.xport.IDomainIdentify
        net.csdn.blog.xport.impl.DomainIdentifyImpl
  
按照下面的代码读取:
// 查找以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
class supported your code to read/write xml
* data from the file. all methods in this class depend on
dom4j
.
*
* @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() {
}
}[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: