`
izuoyan
  • 浏览: 9269958 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

写了一个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学习笔记(全)

    ### 韩顺平编写的Java学习笔记概览 #### Java平台分类与运行机制 - **J2SE(Java 2 Platform, Standard Edition)**: 标准版Java开发平台,适用于桌面应用程序开发。 - **J2EE(Java 2 Platform, Enterprise ...

    我用JAVA编的笔记本程序!

    ”表明这是一个使用Java编程语言开发的笔记应用程序。Java是一种广泛使用的面向对象的编程语言,以其跨平台性、安全性和可移植性而闻名。这个程序可能是为了帮助用户记录、管理和检索信息,类似于电子版的笔记本。 ...

    读取xml库文件 TinyXml

    例如,你可以创建一个新的`TiXmlDocument`对象,加载XML文件,然后遍历文档的元素树,读取或修改你需要的数据。 以下是一个简单的示例: ```cpp #include "TinyXml.h" int main() { TiXmlDocument doc("example....

    POI,读取文件工具类和笔记

    这个工具库广泛应用于 Java 开发环境中,允许开发者在没有安装 Microsoft Office 的情况下读取、写入和操作这些文件。本文将深入探讨 POI 的核心概念、使用方法以及在读取文件时的关键知识点。 **1. POI 概述** ...

    Dom4j学习教程+API+xml实用大全+xml学习笔记+htc

    标题"Dom4j学习教程+API+xml实用大全+xml学习笔记+htc"提及了几个关键主题,包括Dom4j的学习资源、API文档,以及关于XML的实用指南和学习笔记,还提到了一个名为"htc"的文件,可能是关于HTC设备或技术的文档。...

    java笔记本功能实现

    - 文件I/O操作:使用`java.io`包,如`FileWriter`和`BufferedReader`,将笔记内容写入和读取文件。可能需要JSON或XML序列化技术来保存额外的元数据,如撤销历史。 - 文件对话框:`JFileChooser`类提供了一种让用户...

    java 代码实现kindle电子书笔记整理

    在Java编程领域,开发一个能够处理Kindle电子书笔记的桌面程序是一项实用的任务。这个程序主要功能是帮助用户整理和管理Kindle设备上的阅读笔记,包括导入和导出笔记,以便于查阅和备份。以下是对这个项目涉及的技术...

    java控制台版笔记本

    在Java中,一切皆为对象,所以这个“笔记本”程序可能是由多个类组成的,比如`Note`类来表示单个笔记,`Notebook`类来管理所有的笔记,以及一个`Main`类作为程序的入口点。`Note`类可能包含标题、内容和创建日期等...

    java io流学习笔记1

    例如,Apache Commons IO库提供了许多便利的工具类,简化了常见的IO操作,如FileUtils.copyFile()方法用于便捷地复制文件。 在提供的压缩包文件名称列表中,我们看到多个以".dic"结尾的文件,这通常是字典文件,...

    java软件开发ppt和笔记

    5. **输入/输出(I/O)**:Java的I/O流系统允许程序进行文件读写、网络通信等操作,涉及InputStream、OutputStream、Reader、Writer等类。 6. **多线程**:Java内置了对多线程的支持,通过Thread类和Runnable接口可以...

    java笔记集合

    4. **集合框架**:Java集合框架是存储和管理对象的重要工具,包括List、Set和Map接口及其实现类,如ArrayList、LinkedList、HashSet、HashMap等。笔记会介绍它们的区别、用法及操作方法。 5. **IO流**:Java的I/O流...

    TinyXml使用笔记

    TinyXml是一个轻量级的XML解析库,专为C++设计,它允许程序开发者方便地读写XML文档。TinyXml库的源代码简洁且易于理解,对于初学者和专业人士都是一个很好的工具,可以帮助他们在项目中集成XML处理功能。这篇“Tiny...

    个人JAVA笔记汇总

    【个人JAVA笔记汇总】是一个全面概述Java编程技术的资源集合,涵盖了多个子领域,包括文件操作、XML处理、日志记录、框架应用以及移动开发。以下是对这些知识点的详细阐述: 1. **JXL库**: JXL是Java的一个库,用于...

    李兴华Java笔记

    《李兴华Java笔记》是一份综合性的学习资料,涵盖了Java编程语言的基础到高级主题,适合初学者和有一定经验的开发者。这份笔记可能是作者李兴华个人教学或学习经验的结晶,但需注意,它可能并非针对Java 8版本特别...

    PHPXML学习笔记

    3. **XMLReader**:此库用于流式读取XML文档,适合处理大型XML文件,因为它不需要一次性加载整个文档到内存中。 4. **XMLWriter**:用于生成XML文档,提供了一系列方法来创建、打开、关闭元素和属性,以及写入文本...

    java常用框架学习笔记

    ### Java常用框架学习笔记 #### Hibernate ##### 1.1 Hibernate 实现数据库操作步骤 - **导入所需的Jar包**:为了使用Hibernate框架,首先需要在项目中导入Hibernate库。这通常意味着添加一系列与Hibernate相关的...

    java学习笔记

    Java学习笔记是一个全面涵盖Java编程语言基础知识的资源集合,非常适合初学者进行系统性的学习。Java是一种广泛应用的面向对象的编程语言,以其“一次编写,到处运行”的特性而著名,这得益于其跨平台的JVM(Java...

    java笔记java笔记java笔记

    `java.io`包提供了流式输入/输出的支持,是进行文件读写和网络通信的基础。 - **流的概念与分类**:介绍流的基本概念,包括输入流和输出流的区别,以及字节流与字符流的不同。 - **常见流类**:如`FileInputStream`...

    基于Qt开发的简易笔记系统,通过XML存储文件.zip

    【标题】中的“基于Qt开发的简易笔记系统,通过XML存储文件”表明这是一个使用Qt框架用C++编写的笔记应用程序,其数据存储机制是XML。Qt是一个跨平台的应用程序开发框架,广泛应用于桌面、移动和嵌入式平台,提供...

    Java_se基础毕向东老师全程笔记

    根据给定文件的信息,我们可以总结出“Java_SE基础毕向东老师全程笔记”中涉及的关键知识点。这份笔记由毕向东老师授课,涵盖了Java的基础知识及进阶主题,具体章节包括编程基础、数组、面向对象程序设计等多个方面...

Global site tag (gtag.js) - Google Analytics