如果我们有下面的一个XML文件,可以把它想象成一个Relation Database中的Table, 这个XML文件就是一个名字为managers的关系表,而一个<manager>所包含的就是一条记录(Record),而manager中的service和implementation就是一个个的栏位(Field) !
所以,在程序中,可以用类似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() {
 }
 }
 |