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

<style type="text/css"> .CodeFormat {font-family:"Courier New", Courier, mono; font-size:9pt; } </style>如果我们有下面的一个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() {
}
}

你可能感兴趣的:(java,log4j,xml,.net,Blog)