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

如果我们有下面的一个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)上面的属性值!


        
        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 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() {
}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值