XML及jdom解析

xiaoxiao2024-04-21  29

可扩展标记语言(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
转载请注明原文地址: https://www.6miu.com/read-5015146.html

最新回复(0)