XML技术

1、什么是XML?

Extensible Markup Language:可扩展标记语言。

XML文件常见应用:

XML文件除用于保存有关系的数据之外,它还经常用作软件的配置文件,以保存程序模块之间的关系。

在一个软件系统中,为了提高系统的灵活性,它所启动的模块通常由其配置文件决定。

2、XML常见应用

XML技术除用于保存有关系的数据之外,它还经常用做如软件配置文件,以描述模块之间的关系。

在一个软件系统中,为提高系统的灵活性,它所启动的模块通常由其配置文件决定。

例如:

一个软件在启动时,它需要启动A、B两个模块,而A、B这两个模块在启动时,又分别需要A1、A2和B1、B2模块的支持,为了准确描述这种关系,此时使用XML文件最合适不过了!

3、XML语法

一个XML文件分为如下几部分内容:

文档声明 元素 属性 注释 CDATA区 特殊字符 处理指令(processing instruction)

文档声明:<?xml version="1.0"?>

用encoding属性说明文档的字符编码:<?xml version="1.0"encoding="GB2312" ?>

用standalone属性说明文档是否独立:<?xml version="1.0"encoding="GB2312" standalone="yes" ?>   值:yes/no

独立的解释:该文档不依赖与另外一个文档!(IE对该属性不关注)

4、元素

XML元素指XML文件中出现的标签,一个标签分为开始标签和结束标签,一个标签有如下几种形式:

包含标签体:<a>www.baidu.com</a>

不包含标签体:<a></a> ,简写为:<a/>

1>一个标签页可以嵌套若干个子标签,但所有标签必须合理嵌套,绝对不允许交叉嵌套。

2>格式良好的XML文档必须有且仅有一个根标签,其它标签都是这个跟标签的子孙标签。

3>对于XML标签中出现的所有空格和换行,XML解析程序都会当做标签内容处理。

例如:

<网址>www.baidu.com</网址>

<网址>

www.baidu.com

</网址>

上面两个标签内容是不一样的。

4>由于在XML中,空格和换行都作为原始内容被处理,所以,在编写XML文件时,使用换行和缩进等方式来让源文件中的内容清晰可读的"良好"书写方式可能要被改变。

5、命名规范

1>区分大小写

2>不能以数字或"_"开头

3>不能以xml(XML、Xml)开头

4>不能包含空格

5>名称中间不能包含冒号(:).

属性值一定要用双引号("")或单引号('')引起来。

注释:

<!-- 注释-->不能嵌套;XML声明之前不能有注释。

6、CDATA区

语法:

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

<!CDATA[

<a>

   www.blog.com

</a>

]]>

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

对于CDATA区域内的内容,XML解析成语不会处理,而是直接原封不动的输出。

7、转义字符

特殊字符

替代符号

&

&amp;

&lt;

&gt;

"

&quot;

'

&apos

8、处理指令(processing instruction).

处理指令用来指挥解析引擎如何解析xml文档内容。

例如:在XML文档可以使用xml-stylesheet指令,通知XML解析引擎,应用css文件显示xml文档内容。

<?xml-stylesheettype="text/css" href="1.css" ?>

处理指定必须以<?作为开头,以?>作为结尾。

9、XML约束(用来约束一个文档的书写规范)

XMLDTD:

DTD(Document Type Definition):文档类型定义。

例子:

book.dtd:

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

<!ELEMENT 书架 (书+)>

<!ELEMENT 书 (书名,作者,售价)>

<!ELEMENT 书名 (#PCDATA)>

<!ELEMENT 作者 (#PCDATA)>

<!ELEMENT 售价 (#PCDATA)>

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

book.xml:

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

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

<!DOCTYPE 书架 SYSTEM "book.dtd">

<书架>

       <书>

              <书名>Java就业培训教程</书名>

              <作者>小飞</作者>

              <售价>39.00</售价>

       </书>

       <书>

              <书名>JavaScript网页开发</书名>

              <作者>小飞</作者>

              <售价>40.00</售价>

       </书>

</书架>

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

DTD在XML文件内部声明也是可以的。

引用DTD约束:

XML文件使用DOCTYPE声明语句来指明它所遵循的DTD文件

DTD声明语句有两种形式:

1>引用的文件在本地:

<!DOCTYPE文档根节点 SYSTEM "DTD文件的URL">

2>引用的文件时一个公共的文件:

<!DOCTYPE文档根节点 PUBLIC "DTD     名称" '"DTD文件的URL">

例如:

<!DOCTYPEweb-app PUBLIC

"-//Sun Microsystem,Inc.//DTD Web Application 2.3//EN" (该名称无需记忆,网站上会给出)

"http://java.sun.com/dtd/web-app_2_3.dtd">

ELEMENT声明一个XML元素。

语法格式:<ELEMENT 元素名称 元素类型>

元素内容有如下两种形式

 

1、是元素内容;需要用()括起来。

例如:<!ELEMENT书架 (书名,作者,售价)

元素内容中可以使用如下方式,描述内容的组成关系:

1>用逗号分隔,表示内容的出现顺序必须与声明时一致

<!ELEMENT MYFILE  (TITLE,AUTHOR)>

2>用“|”分隔表示,表示任选其一,即多个只能出现一个

<!ELEMENT MYFILE  (TITLE|AUTHOR) >

+:一次或多次(书+)  ?:0次或一次(书?)  *:0次或多次(书*)

也可以用()批量设置。例:

<!ELEMENT MYFILE(TITLE*,AUTHOR?)|COMMNT)>

2、是元素类型;直接书写。

例如:<!ELEMENT书名 (#PCDATE))

DTD规范定义的类型:

EMPY:用于定义空元素.<br.></br>。

ANY:表示元素内容为任意类型。


XML属性定义:

XML文档中的标签属性需通过ATTLIST为其设置属性,语法格式:

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

<!ATTLIST  元素名

属性名1 属性值类型 设置说明

属性名2 属性值类型 设置说明

......

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

属性声明例子:

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

<!ATTLIST商品

类别 CDATA #REQUIRED

颜色 CDATA #IMPLIED

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

对应的XML文件:

<商品 类别="服装"颜色="黄色">...</商品>

设置说明:

1>#REQUIRED::必须设置该属性

2>#IMPLIED:可以设置也可以不设置(可选)

3>#FIXED:说明该属性的取值固定为一个值,在XML文件中不能为该属性设置其它值,但需要为该属性提供这个值。

4>直接使用默认值:在XML中可以设置该值也可以不设置该属性值。若没设置则使用默认值。

举例:

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

<!ATTLIST页面作者

姓名 CDATA  #IMPLIED  

年龄 CDATA  #IMPLIED

联系信息 CDATA  # REQUIRED

网站职务 CDATA  #FIXED "页面作者"

个人爱好 CDATA  "上网"

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

常用的属性值类型:

CDATA: 属性值为普通文本字符串

ENUMERATED

ID:属性值只能由字母,下划线开始,不能出现空白字符(不能以数字开头,会出现问题

ENTITY(实体)

1>实体:为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。

在DTD定义中,一条<!ENTITY ...>定义一个实体。

2>实体分为:引用实体和参数实体。

 

---引用实体:<!ENTITY 实体名称 "实体内容">

引用方式:&实体名称;

---参数实体:被DTD自身文件使用;<!ENTITY % 实体名称 "实体内容">

引用方式:%实体名称;

例如1:

<!ENTITY %  TAG_NAMES "姓名 | EMAIL  | 电话 | 地址">

<!ENTITY %  个人信息 (%TAG_NAMES; | 生日)

例如2:

<!ENTITY%  common.attributes

"id ID #IMPLIED 

Account CDATA #REQUIRED"

引用它:

<!ATTLISTpurchaseOrder %common.attributes;>

<!ATTLISTitem %common.attributes;>

 

10、XML编程:

DOM方式解析XML文档:


DOM对内存消耗比较大;对文档增删改查比较容易。

参考学习:http://blog.csdn.net/feilong1105/article/details/6596913

SAX方式解析XML文档:

从上往下读文档,读取一行处理一行。对内存消耗小,解析速度快,不适合增删改,只适合读取XML文档。

参考学习:http://blog.csdn.net/feilong1105/article/details/6592333

*_*:开发技巧提示:

1>编写完DAO要进行单元测试,如果在单元测试过程途中出错,要进行断点调试!(不要急于求成,一定要要操作这些步骤)。

DOM4j解析XML文档:

官方定义:dom4j isan easy to use, open source library for working with XML, XPath and XSLT on theJava platform using the Java Collections Framework and with full support forDOM, SAX and JAXP.

具体用法看官方提供的文档!(很详细

需要注意的是XPath用法:

In dom4j XPath expressions can be evaluated on the Document or on any Node in the tree (such as Attribute, Element or ProcessingInstruction). This allows complex navigation throughout the document with a single line of code. For example.

    public void bar(Document document) {

        List list = document.selectNodes( "//foo/bar" );

 

        Node node = document.selectSingleNode( "//foo/bar/author" );

 

        String name = node.valueOf( "@name" );

    }

For example if you wish to find all the hypertext links in an XHTML document the following code would do the trick.

    public void findLinks(Document document) throws DocumentException {

 

        List list = document.selectNodes( "//a/@href" );

 

        for (Iterator iter = list.iterator(); iter.hasNext(); ) {

            Attribute attribute = (Attribute) iter.next();

            String url = attribute.getValue();

        }

    }

If you need any help learning the XPath language we highly recommend the Zvon tutorial which allows you to learn by example.

下面提供简单的XPath:

选择根元素AAA:/AAA

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

 <AAA>
          <BBB/>
          <CCC/>
          <BBB/>
          <BBB/>
          <DDD>
               <BBB/>
          </DDD>
          <CCC/>
     </AAA>

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

选择AAA的所有CCC子元素:/AAA/CCC

选择AAA的子元素DDD的所有子元素:/AAA/DDD/BBB

如果路径以双斜线 // 开头, 则表示选择文档中所有满足双斜线//之后规则的元素(无论层级关系)

选择所有BBB元素://BBB

选择所有父元素是DDD的BBB元素://DDD/BBB

语法太多了,具体查文档http://zvon.org/xxl/XPathTutorial/General_chi/examples.html

 

版权所有 违法必究 若要转载,请说明出处:http://blog.csdn.net/feilong1105

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值