都知道,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读取数据,布布扣,bubuko.com