`
whp0731
  • 浏览: 174814 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

XML及jdom解析

    博客分类:
  • XML
阅读更多

可扩展标记语言(eXtensible Markup Language)
一、三个概念
    XMl 可扩展标记语言
    XSL 展现事务的表现形式
    DTD 约束XML文件中是什么
二、简单例子(橡皮泥)
DTD :你叫橡皮泥,可以有颜色、产地的属性
XML :<橡皮泥 颜色=“白色”>
          <产地>
              东海傲来国
          </产地>
      </橡皮泥>
XSL: 装饰文件(一样的数据不一样的装饰)
      第一种捏法----小猫
      第二种捏法----小狗
现在DTD用的较少了,现在使用较多的是Schema
现在的标准主要是W3C制定。

三、WHY XML?
html缺点:标签不可扩展,数据和显示风格没有分离。

四、XML使用最多的是
A、配置文件
B、数据交换(异质信息交换)
C、有利于爬虫等网络技术

五、命名空间
下例中policeman 007name的命名空间采用了缺省的方式,而血刀老祖name采用了以X为开头的命名空间。

“xmlns:X="http://www.police.net/criminal.dtd"”所以两个name区分开了。

<?xml version="1.0" encoding="gb2312" ?>
- <policeman xmlns="http://www.police.net/policeman.dtd"

xmlns:X="http://www.police.net/criminal.dtd">
  <name>007</name>
- <X:criminal>
  <X:name>血刀老祖</X:name>
  </X:criminal>
  </policeman>

六、处理指示
<?              ?>

七、设计原则
以下属性可以设计成元素
如果属性包含子结构
如果该熟性发生次数是多次的
比较重要、DTD需要限制

八、解析
jdom 、dom4j、sax

下面采用jdom进行解析,因为比较简单。

 

九、具体示例

1、gobal-configure.xml

<?xml version="1.0" encoding="UTF-8"?>

<sys-configure>
	<jdbc-info>
		<driver-class-name>com.mysql.jdbc.Driver</driver-class-name>
	    <url>jdbc:mysql://10.60.40.201:3306/futures3</url>	
		<user-name>root</user-name>	
		<password>symbio</password>	
		<beans>	
			<bean id="categoryBourse" class="com.symbio.hz.dataload.CategoryBourse"></bean>
			<bean id="categoryTradeMonth" class="com.symbio.hz.dataload.CategoryTradeMonth"></bean>
		</beans>>
	</jdbc-info>
</sys-configure>

  

 2、DBManager

package com.hz.data;
public class CategoryBourse {
}
 
public class DBManager {
 private String dbDriver_;
 private String dbUrl_;
 private String dbLogin_;
 private String dbPassword_;
 public String getDbUrl_() {
  return dbUrl_;
 }
 public void setDbUrl_(String dbUrl_) {
  this.dbUrl_ = dbUrl_;
 }
 public String getDbLogin_() {
  return dbLogin_;
 }
 public void setDbLogin_(String dbLogin_) {
  this.dbLogin_ = dbLogin_;
 }
 public String getDbPassword_() {
  return dbPassword_;
 }
 public void setDbPassword_(String dbPassword_) {
  this.dbPassword_ = dbPassword_;
 }
 public void setDbDriver_(String dbDriver_) {
  this.dbDriver_ = dbDriver_;
 }
}

 

 

 3、Globleconfigue.java

package hz.data;

import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.xpath.XPath;

/**
 * 读取xml格式的配置文件
 * 
 */
public class Globleconfigue {
	//定义一个需要处理的xml常量。
	private static final String CONFIG_FILE_NAME="gobal-configure.xml";
	//定义根元素
	private Element rootElt;
	//数据库连接属性类DBManager
	private DBManager dbManager= new DBManager();
	public DBManager getDbManager() {
		return dbManager;
	}
	//用来存放下面initBeans();方法中获得的bean
	private Map beanMap= new HashMap();
	
	//定义一个单例模式。
	private static Globleconfigue instance = new Globleconfigue();

	private Globleconfigue(){
		//先生成一个SAXBuilder对象,该对象是dom的内部对象。
		SAXBuilder sb=new SAXBuilder();
		try {
		// sb.build(in)    SAXBuilder的对象sb根据文件输入流in获得Document对象。
		Document doc = sb.build(Thread.currentThread().getContextClassLoader().getResourceAsStream(CONFIG_FILE_NAME));
		//通过Document对象可以取到根元素了。
		this.rootElt=doc.getRootElement();
		//此处如使用rootElt.getChildren();可以一层一层地往下找,但是我们采用一种更快的方式,采用xpath。
		//调用initJdbcInfo()方法
		initJdbcInfo();
		//调用initBeans()方法
		initBeans();
		
		} catch (JDOMException e) {
			// TODO 
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 
			e.printStackTrace();
		}
	}

	public static Globleconfigue getInstance() {
		return instance;
	}
	
	/*
	 * 初始化数据库连接信息
	 */
	private void initJdbcInfo(){
		try {
			//返回一个Elenment对象
			Element driveClassNameElt = (Element) XPath.selectSingleNode(rootElt, "//sys-configure/jdbc-info/driver-class-name");
			//System.out.println(driveClassNameElt.getText());
			//此处就把DbDriver_属性赋值了
			dbManager.setDbDriver_(driveClassNameElt.getText());
			
			Element urlElt = (Element) XPath.selectSingleNode(rootElt, "//sys-configure/jdbc-info/url");
			dbManager.setDbUrl_(urlElt.getText());
			
			Element userNameElt = (Element) XPath.selectSingleNode(rootElt, "//sys-configure/jdbc-info/user-name");
			dbManager.setDbLogin_(userNameElt.getText());
			
			Element passwordElt = (Element) XPath.selectSingleNode(rootElt, "//sys-configure/jdbc-info/password");
			dbManager.setDbPassword_(passwordElt.getText());//至此完成了对DBManager属性的设值。
			
			System.out.println("dbManager类驱动:  "+dbManager.getDbDriver_()+"   ======  "+"dbManager类url:  "+dbManager.getDbUrl_());
			
		} catch (JDOMException e) {
			// TODO 
			e.printStackTrace();
		}
	}
	
	
	/*
	 * 获取bean配置中的类的对象
	 */
	private void initBeans(){
		try {
			//返回一个List对象(List内部的每一个是Element元素),此时运用方法 XPath.selectNodes
			List beanList =  XPath.selectNodes(rootElt,"//sys-configure/beans/bean");
			for(Iterator iter=beanList.iterator(); iter.hasNext();){
				Element beanElt=(Element)iter.next();
				//此处的id对应xml文件中的ID
				String id=beanElt.getAttributeValue("id");
				String className=beanElt.getAttributeValue("class");
				System.out.println("id="+id);
				System.out.println("name="+className);
				//以下两步把bean实例化好了,并放在map中。
				Object obj=Class.forName(className).newInstance();//用反射机制获得对象
				beanMap.put(id, obj);
			}
			
		} catch (JDOMException e) {
			// TODO 
			e.printStackTrace();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public Object getBean(String c){
	return	beanMap.get(c);
	}
	

	public static void main(String[] args){
		Globleconfigue.getInstance();
		CategoryBourse categoryBourse=(CategoryBourse)Globleconfigue.getInstance().getBean("categoryBourse");
		
	}
	

}

 
 4、CategoryBourse.java

  一个空实现的类

 

 

 5、jdom写入

package hz.data;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

/*
 * <selects>
 *   <select>
 *     <id>1</id>
 *     <name>浙江</name>
 *   </select>
 *   <select>
 *     <id>2</id>
 *     <name>辽宁</name>
 *   </select>	  
 * </selects>
 */
public class XMLWrite {
	public static void main(String[] args){
	Element rootElt=new Element("selects");
	Element selectElt=new Element("select");
	Element idElt=new Element("id");
	idElt.addContent("1");
	
	Element valueElt=new Element("name");
	valueElt.addContent("浙江");
	
	selectElt.addContent(idElt);
	selectElt.addContent(valueElt);
	rootElt.addContent(selectElt);
	//以上是建立父子关系的对象
	//以下为输出
	Document doc=new Document(rootElt);//此处把rootElt给Document这个类相当于给了他整个文件
	XMLOutputter out=new XMLOutputter();//jdom中专门用来输出的,out可以接相应的输出流来输出了
	//这句话可以来改变默认编码GBk,改为GB2312
	out.setFormat(Format.getCompactFormat().setEncoding("GB2312"));
	//此处为了方便演示,先生成字符串
	String xmlStr=out.outputString(doc);
	//输出到屏幕
	System.out.print(xmlStr);
	//保存到文件中
	try {
		out.output(doc, new FileOutputStream("c://test.xml"));
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	}
	
	}	
}

 验证以上写如对不对,最简单的方法是用ie浏览器打开生成的xml文件。

分享到:
评论

相关推荐

    使用JDOM解析XML文件

    本篇文章将深入探讨如何使用JDOM解析XML文件。 首先,我们需要理解JDOM的基本结构。JDOM通过Document对象表示整个XML文档,Element代表XML元素,Attribute表示元素属性,Text表示元素内的文本内容。这些类构成了...

    jdom 读取XML 文件

    使用JDOM,我们可以通过API操作这些节点来实现对XML的解析和操作。 要读取XML文件,首先需要在项目中引入JDOM库。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.jdom ...

    java jdom解析xml

    Java JDOM解析XML是Java开发中处理XML文档的一种方法,JDOM全称为Java Document Object Model,它是一个基于Java语言的API,用于创建、修改和读取XML文档。JDOM为XML处理提供了一种高效且方便的解决方案,尤其适用于...

    用jdom解析xml

    **Java与XML:JDOM解析XML的详细指南** 在Java编程中,XML(eXtensible Markup Language)是一种被广泛使用的数据交换格式,用于存储结构化数据。为了处理XML文档,开发者可以使用多种库,其中之一就是JDOM。JDOM是...

    jdom解析xml文件

    **JDOM解析XML文件** XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件和文档存储等领域。在Java中,JDOM(Java Document Object Model)是一个流行的选择来解析和操作...

    用jdom解析xml文件

    在这个例子中,我们将深入探讨如何使用JDOM解析XML文件,并进行遍历与构建。 首先,我们需要了解JDOM的基本概念。JDOM主要由三部分构成:SAXBuilder用于从XML源构建DOM树,Element代表XML文档的元素,Attribute代表...

    xml的JDom解析(内含JDombao)

    本文将深入探讨JDOM解析XML的基本原理、步骤以及示例。 ### JDOM概述 JDOM(Java Document Object Model)是一个完全基于Java的XML API,它的设计目标是提供一种高效、快速、易于使用的API,以便于在Java环境中...

    java利用jdom解析xml文件

    本篇文章将深入探讨如何利用JDOM解析XML文件,以及在这个过程中涉及的关键知识点。 首先,我们需要了解XML(Extensible Markup Language)的基本概念。XML是一种标记语言,用于存储和传输结构化数据。它的结构清晰...

    Jdom解析XML

    使用JDOM解析XML文档通常包括以下几个步骤: 1. 创建`SAXBuilder`实例,这是JDOM提供的解析器,可以将XML输入源转换为`Document`对象。 2. 使用`SAXBuilder`的`build`方法读取XML文件,生成`Document`对象。 3. ...

    利用JDOM解析xml文件

    本篇文章将深入探讨如何利用JDOM解析XML文件,并基于XML中的类名生成相应的对象。 首先,我们需要理解JDOM的基本概念。JDOM提供了一组Java对象来表示XML文档,包括Element(元素)、Attribute(属性)、Text(文本...

    JDOM解析xml文档实例(自己编写,仅供参考)

    1. `JDOMUtil.java`:这是一个Java类,包含了使用JDOM解析XML的主要代码。在这个例子中,我们将学习如何读取XML文件,创建一个`SAXBuilder`对象来构建XML文档的DOM(文档对象模型)表示,然后通过`Document`对象来...

    基于java的开发源码-用jdom解析xml.zip

    基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发...

    JDOM解析XML

    要使用JDOM解析XML,首先需要将JDOM的jar文件(如jdom.jar)添加到项目的类路径中。此外,由于XML解析通常涉及到其他库,如XPath解析和DTD处理,我们看到压缩包中还包含了一些其他相关的jar文件: 1. xalan.jar:...

    jdom解析xml文件小实例

    在这个小实例中,我们将深入探讨如何使用JDOM解析XML文件。 首先,我们需要引入JDOM的依赖。在Java项目中,如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.jdom &lt;artifactId&gt;...

    解析XML的JDOM的jar包

    解析XML的JDOM的jar包,只有引入这个包就可以解析xml了

    XML文件的JDOM解析

    **JDOM解析XML的基本步骤:** 1. **导入JDOM库**:在Java项目中,需要添加JDOM的jar文件,如`jdom-bundle-1.1.3.jar`。 2. **构建SAXBuilder**:`SAXBuilder`是JDOM用来解析XML文件的类。创建一个`SAXBuilder`实例...

    jdom解析XML文件and把字符串解析成XML

    ### jdom解析XML文件及将字符串解析为XML #### 一、JDOM简介与环境搭建 JDOM(Java Document Object Model)是一种用Java语言编写的轻量级API,用于处理XML文档。它允许开发者轻松地读取、创建、修改XML文档,并将...

    java 使用JDOM解析xml文件.docx

    Java 使用 JDOM 解析 XML 文件 Java 是一种广泛使用的程序设计语言,而 XML 是一种广泛使用的标记语言,用于存储和传输数据。在 Java 中,解析 XML 文件是一件常见的任务,而 JDOM 是一个流行的开源库,用于解析和...

    java xml解析jdom类库

    用于xml解析,很好用的一个java类库

Global site tag (gtag.js) - Google Analytics