都知道,HTML被设计用来显示数据,XML被设计用来保存、数据传输。而我们平时经经常使用的无非是保存数据、读取数据。所以这里主要介绍XML相关基础内容。以及用DOM4j来存取XML的数据。

  以下简单介绍XML相关的基础内容——命名空间、XSL、DTD与Schema

1》基本结构

   

   -------------------------

  Ø  <>成对。区分大写和小写

  Ø  顶层元素仅仅能有一个

  Ø  元素不能以xml开头,且不能有空格

2》命名空间

  与我们编程语言中的命名空间类似。比如,假设想要建立两个名称同样的类,就必须将两个类置于不同的命名空间下。XML也类似,就是为了区分两个名称同样的元素时在元素前加上不同的前缀。

比如以下的XLS文件里的第二句:<xsl:stylesheet
version="1.0"xmlns:xsl="http://www.w3.org/TR/WD-xsl">

中的xmlns代表xml namespace即xml命名空间。

此命名空间由xsl前缀来代表。后面的详细地址貌似没有实际的意义,不过为了赋予命名空间一个惟一的名称。

3》XSL

  XSL----eXtensible Stylesheet Language(扩展样式表语言),事实上就是XML样式表,就像CSS是HTML的样式表一样,用来修饰XML的显示。

使得其显示起来更规范、美观。例:

  XML未加XSL(样式表)修饰时在浏览器中的显示:

  

  XML增加XSL(样式表)修饰后在浏览器中的显示:

  

  XSL的内容例如以下:

<?xml version="1.0" encoding="gb2312"?

>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<html>
<head><title>学生信息</title></head>
<body>
<div align="center"><p>
<xsl:value-of select="*/学校"/>
</p></div>
<xsl:apply-templates select="学生信息"/>
</body>
</html>
</xsl:template>
<xsl:template match="学生信息">
<p align="center">
<table border="1">
<tr>
<td>编号</td>
<td>姓名</td>
<td>性别</td>
<td>年龄</td>
</tr>
<xsl:for-each select="学生">
<tr>
<td><xsl:value-of select="编号"/></td>
<td><xsl:value-of select="姓名"/></td>
<td><xsl:value-of select="性别"/></td>
<td><xsl:value-of select="年龄"/></td>
</tr>
</xsl:for-each>
</table>
</p>
</xsl:template> </xsl:stylesheet>

4》DTD与Schema

  Ø  DTD----文档类型定义。用来定义XML文档必须遵循的语法、结构。它规定了标签的名称、顺序等仅仅能是某种格式。眼下已被Schema取代。

  Ø  Schema----对XML的语法、结构比DTD有更准确的定义。可约定XML的标签和类型。

  它们能够对XML是否符合当前标准进行验证,比如:

  XML文档:(DocType指明所遵从的语法、结构规范标准)

<span style="color:#000000;"><?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE 丛书 SYSTEM "book.dtd">
<丛书>
<书籍>
<名称>萍踪侠影</名称>
<人>梁羽生</人>
<价 unit="RMB">100.60</价>
</书籍>
<书>
<名>岳阳楼记</名>
<人>范仲淹</人>
<价 unit="美元">76.8</价>
</书>
</丛书></span>

  相应的DTD:

<span style="color:#000000;"><?

xml version="1.0" encoding="gb2312"?>
<!ELEMENT 丛书 (书*)>
<!ELEMENT 书 (名,人+,价*)>
<!ELEMENT 名 (#PCDATA)>
<!ELEMENT 人 (#PCDATA)>
<!ATTLIST 人 gender CDATA 'male'>
<!ELEMENT 价 (#PCDATA)>
<!ATTLIST 价
unit (RMB|美元|日元) 'RMB'></span>

  Ø  ,间隔的属性要严格按顺序;空格间隔能够不按顺序

  Ø  +号代表至少出现一次。*号代码出现0次或多次

  Ø  没有+号和*号的必须出现一次

  相应的schema:

<span style="color:#000000;"><?xml version="1.0" encoding="gb2312"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="丛书">
<xs:complexType>
<xs:sequence>
<xs:element name="书">
<xs:element name="名" minoccurs="1"></xs:element>
<xs:element name="人"></xs:element>
<xs:element name="价">
<xs:attribute name="unit">
<xs:enumeration value="RMB"/>
<xs:enumeration value="美元"/>
<xs:enumeration value="日元"/>
</xs:attribute>
</xs:element>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema></span>

5》DOM4j读取XML

  由名字可知它是用dom
的方式解析xml文件。基础使用方法例如以下:

  首先引入两个jar包:

    Ø 
dom4j-1.6.1.jar

    Ø jaxen-1.1-beta-6.jar(位于dom4j的lib目录下,XPath必备

  实例-读取例如以下配置文件:(sys-config.xml):

<?

xml version="1.0" encoding="UTF-8"?>
<config>
<db-info>
<driver-name>oracle.jdbc.driver.OracleDriver</driver-name>
<url>jdbc:oracle:thin:@localhost:1521:bjpowern</url>
<user-name uid="zhipeng"/>
<password pwd="zhipeng"/>
</db-info>
</config>

  读取文件:

	<span style="font-size:14px;">SAXReader reader = new SAXReader();
InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("sys-config.xml");
Document doc = reader.read(in);</span>

  读取节点对象:(採用XPath读取)

	<span style="font-size:14px;">Element driverNameElt = (Element)doc.selectObject("/config/db-info/driver-name");
Element urlElt = (Element)doc.selectObject("/config/db-info/url");
Element userNameElt = (Element)doc.selectObject("/config/db-info/user-name");
Element passwordElt = (Element)doc.selectObject("/config/db-info/password");</span>

  读取节点对象的值或属性:

	<span style="font-size:14px;">//获取节点的值
string driverName = driverNameElt.getStringValue();
string url = urlElt.getStringValue();
//获取节点的属性
string userName = userNameElt.attribute("uid");
string password = passwordElt.attribute("pwd");</span>

6》总结

  XML 是各种应用程序之间进行传输数据的最经常使用的工具。它应当用来从 HTML那里分离数据,可被用来交换、共享以及存储数据。

XML基础以及用DOM4j读取数据的更多相关文章

  1. 《程序实现》从xml、txt文件里读取数据写入excel表格

    直接上码 import java.io.BufferedReader; import java.io.DataInputStream; import java.io.File; import java ...

  2. Ado.Net基础拾遗一:读取数据

    从数据库中读取数据: 使用DataReader对象从数据库中读取数据 首先需要添加几个命名空间 //需要添加的命名空间 using System.Configuration; using System ...

  3. 深入浅出Java Dom4j读取XML

    在以前自己使用的xml较少,只是了解其很强大,现在可算是在DRP中,真正的开始使用它了,以前只是简单的理解xml,xml即可扩展标记语言,简单的使用,具体是什么?怎么用?还是一直让自己期待的. 首先来 ...

  4. 使用dom4j 读取XML文件

    第一次接触dom4j的时候,感觉这个东西很神秘,因为之前虽然知道XML文件吧,但从来没有用过,一直感觉XML肯定不好操作.当得知,dom4j可以很容易的操作读取XML文件时,不免有些好奇,那么,用do ...

  5. DOM4J读取XML文件

    最近在做DRP的项目,其中涉及到了读取配置文件,用到了DOM4J,由于是刚开始接触这种读取xml文件的技术,好奇心是难免的,于是在网上又找了一些资料,这里就结合找到的资料来谈一下读取xml文件的4中方 ...

  6. dom4j读取XML文件内容

    <?xml version="1.0" encoding="UTF-8"?> <RESULT> <VALUE> <NO ...

  7. 【XML】利用Dom4j读取XML文档以及写入XML文档

    Dom4j简介 dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,它的性能 ...

  8. JDBC Java 程序从 MySQL 数据库中读取数据,并备份到 xml 文档中

    MySQL 版本:Server version: 5.7.17-log MySQL Community Server (GPL) 相关内容:JDBC Java 程序从 MySQL 数据库中读取数据,并 ...

  9. 使用dom4j读取xml连接数据库与之单例模式

    使用dom4j读取xml ,加入jar包 dom4j-1.6.1.jar jaxen-1.1-beta-6.jar public class XmlConfigReader { //懒汉式,延迟加载 ...

随机推荐

  1. python开发_tkinter_单选按钮

    这篇blog主要是描述python中tkinter的单选按钮操作 下面是我做的demo 运行效果: ====================================== 代码部分: ===== ...

  2. BZOJ 1012: [JSOI2008]最大数maxnumber 单调队列/线段树/树状数组/乱搞

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 4750  Solved: 2145[Submi ...

  3. Linux下环境变量设置技巧,不用/etc/profile而是在/etc/profile.d目录下新建特定的shell文件来设置

    区别: 1.两个文件都是设置环境变量文件的,/etc/profile是永久性的环境变量,是全局变量,/etc/profile.d/设置所有用户生效,同样是永久变量,是全局变量. 2./etc/prof ...

  4. 如何在ubuntu安装phpstorm

    第一步:使用组合键ctrl+alt+t 打开Terminal,cd /home/xxx(当前登录用户名)/downloads(下载目录) 第二步:下载 phpstorm 附截止发文最新版本链接:htt ...

  5. JAVA自定义注解SpringAOP

    原文:https://my.oschina.net/wangnian/blog/801348 前言:Annotation(注解)是JDK5.0及以后版本引入的,它的作用就是负责注解其他注解.现在开发过 ...

  6. EXC_BAD_ACCESS(code=2,address=0xcc 异常解决 及 建议不要在子线程中刷新界面

    iOS 上不建议在非主线程进行UI操作,在非主线程进行UI操作有很大几率会导致程序崩溃,或者出现预期之外的效果. 我开始不知道这一点,在子线程中进行了弹窗操作,结果程序就出问题了! 报的错误是(EXC ...

  7. .NET:如何让线程支持超时?

    背景 本文是为了回复博客园一个兄弟的问题,主要回答两个问题: 如何让线程支持超时? 如何让线程在执行结束后销毁? MS 现在不推荐使用低级别的 Thread 编程,而推荐使用 Task,另外我多数情况 ...

  8. Ip和long互转

    // <summary> /// 将127.0.0.1形式的IP地址转换成十进制整数 /// </summary> /// <param name="strIp ...

  9. 论文神器Latex30分钟快速入门教程-只需9步向学神看齐

    小E说:工欲善其事,必先利其器.立志做个安静的美学霸的你,学会Latex,一定能使你的论文写作事半功倍. 1.LaTeX软件的安装和使用 方法A(自助):在MikTeX的官网下载免费的MikTeX编译 ...

  10. 从volatile说到i++的线程安全问题

    简介 volatile关键字保证了在多线程环境下,被修饰的变量在别修改后会马上同步到主存,这样该线程对这个变量的修改就是对所有其他线程可见的,其他线程能够马上读到这个修改后值. Thread的本地内存 ...