建站知识

学习XML入门精华

发布时间:01-28 | 来源:酷遨网络

1、前言
本贴绝大部分资源均转自www.xml.org.cn
声明先,免得有人说偶盗链

2、黄金装备
xml explorer简体中文正式版(免费)xml.org.cn下载
(推荐这个,简单易用,比冰火双剑还要牛x)
介绍
xml explorer是一个xml和schema编辑器。它简单易用,可以展现多个窗口。可从树状图、列表、表格、文字模式和跳出式编辑区等方式操作任何xml资料。

* 它的copy and paste功能可以让使用者复制任何xml 文字到系统剪贴簿上,然后贴到任何xml explorer窗口。
* 它支持双向xpath,所以只要点任何xml节点或属性,一个标准的xpath就出来了。
* 它两栏的文字展现方式方便比较和编辑。
* 它的schema完全支持树状图、列表、集合观看模式、文字模式。
* 有了它,你还能轻易把微软excel、access和任何odbc资料转成xml格式。
* 新版本在表格模式包含了xml资料分析功能。

special thanks: 感谢david ren(mergesoft.com)免费为本站提供正式版本和注册码。

注意:该版本和注册码只限于在中国大陆地区使用。
注册码:1096dfde-1962-43a0-0000-005dxbdipksd

英文版:http://download.xml.org.cn/xmlexplorer.msi
中文版:http://download.xml.org.cn/xmlexplorercn.msi
中文版补丁:http://download.xml.org.cn/xmlexplorer268cn.rar

其他工具下载:
bbs.xml.org.cn/dispbbs.asp?boardid=35&id=6191
其他资源下载:
bbs.xml.org.cn/resource.asp

以下将采用作者“小鞋子”的入门教程,某些部分略有修改

3、定义标记
<?xml version=/"1.0/"?>
<book>
<title>xml</title>
<author>lisongtao</author>
</book>
如果文档中包含中文,就要加入编码
<?xml version=/"1.0/" encoding=/"gb2312/"?>
关于编码,参见“无废话xml”的相关魔鬼教程。。。

4、使用css样式
<?xml version=/"1.0/"?>
<?xml-stylesheet type=/"text/css/" href=/"1.css/"?>
<lisongtao>
hello the world!
</lisongtao>
---------------------------------------------
1.css
----------------------------------------
lisongtao {display: block; font-size: 48pt; font-weight: bold;}

5、用xsl定义
什么叫“xsl”,你可以暂且看作一个类似css,但比css更强的东西。xml语法参见其它教程,不废话这里。

1.xml
--------------------------------------------
<?xml version=/"1.0/"?>
<?xml-stylesheet type=/"text/xsl/" href=/"2.xsl/"?>
<lisongtao>
hello the world!
</lisongtao>
---------------------------------------------
2.xsl
----------------------------------------
<?xml version=/"1.0/" encoding=/"gb2312/"?>
<xsl:stylesheet xmlns:xsl=/"http://www.w3.org/tr/wd-xsl/">
<xsl:template match=/"//">
<html>
<head>
<title>hello the world</title>
</head>
<body bgcolor=/"#ccccff/">
<h1 align=/"center/"><xsl:value-of select=/"lisongtao/"/></h1>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

6、注释
没什么好多讲的,和js一样
<?xml version=/"1.0/" encoding=/"gb2312/"?>
<!--
这是一些有关书的信息
-->
<books>
<book>
<name>xml应用</name>
<author>list1</author>
<price>55.00</price>
</book>
</books>

7、节点的属性
<?xml version=/"1.0/"?>
<books title=/"list/">
<book>
<name>xml and asp</name>
<price>45.00</price>
<publisher>tsinghua </publisher>
</book>
</books>

8、特殊标记
xml中,< > /" /' &特殊标记时,应当用< > /"l &apos; &表示
<?xml version=/"1.0/"?>
<books height=/"6&apos;5&apos;/">
<book width=/"6/"5/"/">
<name>list &lisongtao</name>
<author>lisongtao < list@263.net></author>
</book>
</books>

9、中文标记
汗。。。。又一个xltxlm性的自恋狂。。
虽然xml支持中文标签,但不建议使用。
<?xml version=/"1.0/" encoding=/"gb2312/"?>
<好人 >
<name>小鞋子</name>
</好人>

10、dtd数据格式
你可以暂且把dtd看作一种规则,它保证xml按照这些规则来定义数据格式。

1.dtd
=====================
<?xml version=/"1.0/"?>
<!element book (price,name)>
<!element name (#pcdata)>
<!element price (#pcdata)>
查资料:如果同一节点含有多个字节点,应该如何定义了?
=====================
dtd.xml
==================
<?xml version=/"1.0/"?>
<!doctype book system /"1.dtd/">
<book>
<name>lisongtao</name>
<price>11.2</price>
</book>

11、dtd直接写在xml里面
<?xml version=/"1.0/"?>
<!doctype book [
<!element book (price,name)>
<!element name (#pcdata)>
<!element price (#pcdata)>
]>
<book>
<price>11.2</price>
<name>lisongtao</name>
</book>

12、节点的多属性
<?xml version=/"1.0/" encoding=/"gb2312/"?>
<books>
<book name=/" xml应用/" author=/"list1/" price=/"55.00/">
</book>
</books>

13、结束标记另一种方法
不推荐。。。
<?xml version=/"1.0/" encoding=/"gb2312/"?>
<books>
<book name=/" xml应用/" author=/"list1/" price=/"55.00/"[color]/[/color]>
</books>

14、直接显示包含特殊字符
前面我们看到了,< > /" /' &等特殊字符须手动修改后才能显示,如果大量了?。。。就用cdata

<?xml version=/"1.0/" encoding=/"gb2312/"?>
<books>

<![cdata[
<book>
<name>xml应用</name>
<author>list1</author>
<price>55.00</price>
</book>
]]>
<book>
<name>xml应用</name>
<author>list1</author>
<price>55.00</price>
</book>
</books>

15、小结,一个完整的xml
<?xml version=/"1.0/" encoding=/"gb2312/"?>
<!--这是一个学生选课系统的所有数据-->
<choose_system>
<students>
<student id=/"984610/" lesson_id=/"11/">
<name>咚咚</name>
<age>25</age>
<sex>男</sex>
<department>自动化</department>
</student>
<student id=/"984611/" lesson_id=/"12/">
<name>矿哥</name>
<age>26</age>
<sex>男</sex>
<department>自动化</department>
</student>
<student id=/"984612/" lesson_id=/"11/">
<name>欢迎新村民</name>
<age>23</age>
<sex>男</sex>
<department>自动化</department>
</student>
<student id=/"984613/" lesson_id=/"12/">
<name>张明</name>
<age>25</age>
<sex>男</sex>
<department>自动化</department>
</student>
</students>
<lessons>
<lesson id=/"11/">
<name>控制原理</name>
<num>12</num>
<les_start>99.2</les_start>
<les_end>99.7</les_end>
<end_method>考试</end_method>
</lesson>
<lesson id=/"12/">
<name>网络原理</name>
<num>11</num>
<les_start>99.3</les_start>
<les_end>99.6</les_end>
<end_method>通过</end_method>
</lesson>
</lessons>
<teachers>
   <teacher id=/"1122/" lesson_id=/"11/">
<name>开心啊</name>
<age>33</age>
<tea_age>3</tea_age>
<rank>教授</rank>
<publish>控制原理</publish>
<sex>男</sex>
</teacher>
   <teacher id=/"1123/" lesson_id=/"12/">
<name>还是开心啊</name>
<age>40</age>
<tea_age>7</tea_age>
<rank>副教授</rank>
<publish>网络原理</publish>
<sex>男</sex>
</teacher>
</teachers>
</choose_system>

16、css样式定义节点
<?xml version=/"1.0/"?>
<?xml-stylesheet type=/"text/css/" href=/"1.css/"?>
<books>
<book>
<author>lisongtao</author>
<name>the application of asp</name>
</book>
</books>
---------------------------------------------------------
1.css
-----------------------------------------------------------
books
{
display:block;
}
book
{
display:block;
background-color:#aabbcc
}
---------------------------------------------
心得:以上的定义方法和重定义html的标签样式一样,如对css不熟者,推荐用dw生成后再对应一下效果。很易就可以学会的。

17、样式类定义xml
<?xml version=/"1.0/" standalone=/"yes/"?>
<?xml-stylesheet type=/"text/css/" href=/"3.css/"?>
<list class=/"listclass/">
<sublist class=/"listsmall/">lisongtao</sublist>
<sublist>zhongguo</sublist>
</list>
----------------------------------------------------------
3.css
.listclass {color: red; font-size:26pt}
.listsmall {color:blue; font-size:15pt}

18、类的id定义xml
<?xml version=/"1.0/" standalone=/"yes/"?>
<?xml-stylesheet type=/"text/css/" href=/"id.css/"?>
<school>
<class id=/"list/">lisongtao</class>
<monitor id=/"list1/">lisongtao</monitor>
</school>
---------------------------------
id.css
--------------------------------------------------
#list {font-size:28pt; color:red; display: block}
#list1 {font-size:14pt; color:blue display: block }

19、xml中直接使用css
<?xml version=/"1.0/" standalone=/"yes/"?>
<?xml-stylesheet type=/"text/css/" href=/"sevil.txt/"?>
<!--这句一定要有,而sevil.txt可以换别的名字,不过中文好像这里不行.-->
<foo style=/"font-weight: bold;color:red/">
hello xml!
</foo>

20、在一个样式表中合并引用另一个样式表的方法
@import url(/"sevil.css/");

21、用css定制个节点的块状显示
xml.xml
--------------------------------------------------------------------------------
<?xml version=/"1.0/" encoding=/"gb2312/"?>
<?xml-stylesheet type=/"text/css/" href=/"css.css/"?>
<books xmlns:html=/"http://www.w3.org/profiles/xhtml-transitional/">
<html:style>
books
{
display:block;
width:30em;
}
</html:style>
<book>
<author>list </author>
<name> asp及其应用</name>
<publisher>tsinghua university</publisher>
<price>12.30</price>
</book>
<book>
<author>james </author>
<name> xml及其应用</name>
<publisher>tsinghua university</publisher>
<price>15.30</price>
</book>
<book>
<author>john </author>
<name> css及其应用</name>
<publisher>peiking university</publisher>
<price>16.30</price>
</book>
</books>

---------------------------------------------------------------
css.css
---------------------------------------------------------------
book
{
display:block;
background-color:#aabbcc;
padding:1.2em;
margin-bottom:1em;
}
author
{
display:block;
font-size:16pt;
color:red;
}

22、在同一个xml文件内引用多个css样式表的方法
<?xml version=/"1.0/" standalone=/"yes/"?>
<?xml-stylesheet type=/"text/css/" href=/"1.css/"?>
<?xml-stylesheet type=/"text/css/" href=/"2.css/"?>

23、在xml中使用html标记的方法,例插入图片
<?xml version=/"1.0/" encoding=/"gb2312/"?>
<?xml-stylesheet type=/"text/css/"?>
<books xmlns:html=/"http://www.w3.org/profiles/xhtml-transitional/">
<book>
<author>list </author>
<name> asp及其应用</name>
<publisher>tsinghua university</publisher>
<price>12.30</price>
<html:img src=/"suzh1.jpg/" />
</book>
</books>

24、在xml中使用html标记的方法(2),使用超连接
<?xml version=/"1.0/" encoding=/"gb2312/"?>
<?xml-stylesheet type=/"text/css/"?>
<books xmlns:html=/"http://www.w3.org/profiles/xhtml-transitional/">
<book>
<author>list </author>
<name> asp及其应用</name>
<publisher>tsinghua university</publisher>
<price>12.30</price>
[colorred]<from><html:a href=/"http://www.263.net/">263中国在线</html:a></from>[/color]
</book>
</books>

25、在xml中使用html标记(3),使用<br><p>等标记
<?xml version=/"1.0/" encoding=/"gb2312/"?>
<?xml-stylesheet type=/"text/css/"?>
<books xmlns:html=/"http://www.w3.org/profiles/xhtml-transitional/">
<book>
<html:p>
<author>list </author>
</html:p>
<name> asp及其应用</name>
<publisher>tsinghua university</publisher>
<html:br/>
<price>12.30</price>
</book>
</books>

26、在xml中使用html标记的方法(4),使用表格标签
<?xml version=/"1.0/" encoding=/"gb2312/"?>
<?xml-stylesheet type=/"text/css/"?>
<books xmlns:html=/"http://www.w3.org/profiles/xhtml-transitional/">
<book>
<html:table border=/"1.0/" align=/"center/">
<html:tr>
<html:td>list</html:td>
<html:td>asp programing</html:td>
<html:td>tsinghua university</html:td>
</html:tr>
</html:table>
</book>
</books>

27、在xml中使用html标记的方法(5),使用表单
汗。。。。这样子就没意思了,仅供参考
<?xml version=/"1.0/" encoding=/"gb2312/"?>
<?xml-stylesheet type=/"text/css/"?>
<books xmlns:html=/"http://www.w3.org/profiles/xhtml-transitional/">
<book>
<html:table border=/"0/" align=/"center/">
<html:tr>
<html:td>name</html:td>
<html:td><html:input type=/"text/"/></html:td>
</html:tr>
<html:tr>
<html:td>name</html:td>
<html:td><html:input type=/"text/"/></html:td>
</html:tr>
<html:tr>
<html:td>name</html:td>
<html:td><html:input type=/"text/"/></html:td>
</html:tr>
</html:table>
<html:center>
<html:input type=/"submit/"/><html:input type=/"reset/"/>
</html:center>
</book>
</books>

28、在xml中使用html标记的方法(6),使用js脚本
<?xml version=/"1.0/" encoding=/"gb2312/"?>
<?xml-stylesheet type=/"text/css/"?>
<books xmlns:html=/"http://www.w3.org/profiles/xhtml-transitional/">
<html:script language=/"javascript/">
var frunning = 0
function starttrans()
{
if (frunning == 0)
{
frunning = 1
sampleid.filters.revealtrans.apply();
sampleid.src = /"suzh1.jpg/";
sampleid.filters.revealtrans.play()
}
else
{
frunning = 0
sampleid.filters.revealtrans.apply();
sampleid.src = /"suzh2.jpg/";
sampleid.filters.revealtrans.play()
}


}
</html:script>
<html:img id=/"sampleid/" src=/"suzh2.jpg/" width=/"200/" height=/"200/" style=/"filter:revealtrans(duration=3)/" onclick=/"starttrans()/" />
<html:br />
click image for transition filter: blend
</books>

29、总结css/html
其实在xml里面调用css来显示统一的样式很简单,主要通过一个
<?xml-stylesheet type=/"text/css/" href=/"1.css/"?>
这样的方法来联系起来。最好能先学学css的语法这样对大家很有好处。如果不太会的话,也可以用dw来自动生成css样式表后再联起来,呵。

致于调用html标记可以用<html:标记>这样的方法来实现,但一定要注意记他合乎xml的规则就行了。

30、通过xsl显示xml
xml.xml
----------------------------------------------------------
<?xml version=/"1.0/"?>
<?xml-stylesheet type=/"text/xsl/" href=/"1.xsl/"?>
<!--连接xsl的方法,是不是和连接css很像啊??呵.-->
<persons>
<person>
<name> lisongtaow </name>
<age>25</age>
<tel>66666666</tel>
</person>
<person>
<name> lisongtao1</name>
<age>26</age>
<tel>66666667</tel>
</person>
<person>
<name>lisongtao3</name>
<age>28</age>
<tel>66666669</tel>
</person>
</persons>

-----------------------------------------------------------------------
1.xsl
----------------------------------------------------------------------
<?xml version=/"1.0/"?>
<xsl:stylesheet xmlns:xsl=/"http://www.w3.org/tr/wd-xsl/">
<xsl:template match=/"//">
<html>
<body>
<center>
<h2>the notepad</h2>
<table border=/"1/">
<tr>
<td>name</td>
<td>age</td>
<td>tel</td>
</tr>
<xsl:for-each select=/"persons/person/">
<tr>
<td><xsl:value-of select=/"name/"/></td>
<td><xsl:value-of select=/"age/"/></td>
<td><xsl:value-of select=/"tel/"/></td>
</tr>
</xsl:for-each>
<!--循环输出语块,其中/"persons/person/"代表着路径-->
</table>
</center>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

31、xsl小结
做完这个例子先总结一下:
在xsl的定义方法其实是一个html的全显示格式。我们可以用dw直观的编辑好,再加入代码。
这里xsl我们可以理解成为一个模板。
其主要的定义方法有一个规则:
以后我们再写xsl时就可以把这东东copy出来了。不用老是对着书打,呵。。。
(用xml编辑器更快。。。^_^)
--------------------------------------------------------------
<?xml version=/"1.0/"?>
<xsl:stylesheet xmlns:xsl=/"http://www.w3.org/tr/wd-xsl/">
 <xsl:template match=/"//">
 
</xsl:template>
</xsl:stylesheet>
-----------------------------------------------------------

32、输出某节点下的所有内容
上一例子我们成功地用xsl输出了xml里面数据。
如果我们只要输出某相同节点其下的内容,我们可以这样做:
=======================
1.xml
要求:输出xsl的/"persons/person/tel/hometel/"下面的所有内容.这里/"person/"可以是多层
--------------------------------------------------------
<?xml version=/"1.0/"?>
<?xml-stylesheet type=/"text/xsl/" href=/"2.xsl/"?>
<persons>
<person>
<name>lisongtao</name>
<age>25</age>
<tel><hometel>
<tel>64456787</tel>
<childhometel>64456785</childhometel>
</hometel>
<offtel>44442222</offtel>
<worktel>3333333</worktel>
</tel>
</person>
<person>
<name>liwei</name>
<age>25</age>
<tel><hometel>
<tel>66545434</tel>
<childhometel>65433333</childhometel>
</hometel>
<offtel>64442222</offtel>
<worktel>6333333</worktel>
</tel>
</person>
<person>
<name>zhangxue</name>
<age>25</age>
<tel><hometel>
<tel>84343434</tel>
<childhometel>8333333</childhometel>
</hometel>
<offtel>84442222</offtel>
<worktel>8333333</worktel>
</tel>
</person>
<person>
<name>wure</name>
<age>26</age>
<tel>66666667</tel>
</person>
</persons>

================================
2.xsl
-----------------------------------------------------------
<?xml version=/"1.0/"?>
<xsl:stylesheet xmlns:xsl=/"http://www.w3.org/tr/wd-xsl/">
<xsl:template match=/"//">
<html>
<body>
<center>
<h2>the notepad</h2>
<table border=/"1/">
<tr>
<td>name</td>
</tr>
<xsl:for-each select=/"persons/person/tel/hometel/*/">
<tr>
<td><xsl:value-of select=/"./"/></td>
</tr>
</xsl:for-each>
<!--注意for-each的select路径.然后用value-of输出全部所要求的节点内容-->
</table>
</center>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

33、用xsl让xml文件使用到节点属性的搜索功能
xml.xml
---------------------------------------------------------------------------------------
<?xml version=/"1.0/" encoding=/"gb2312/"?>
<?xml-stylesheet type=/"text/xsl/" href=/"xsl.xsl/"?>
<students>
<student id=/"98789/">
<name>廖西</name>
<sex>女</sex>
<birthday type=/"阳历/">1987.2</birthday>
<phone>1303456787</phone>
<skill>唱歌</skill>
<dd>asdf
<ee>asdf</ee></dd>
<list>asdf</list>
</student>
<student id=/"98788/">
<name>小记</name>
<sex>女</sex>
<birthday>1975.6</birthday>
<phone>13901145678</phone>
<skill>爬山</skill>
</student>
<student id=/"98785/">
<name>江南</name>
<sex>女</sex>
<birthday>1978.8</birthday>
<phone>64576786</phone>
<skill>网络</skill>
</student>
<student>
<name>小红</name>
<sex>男</sex>
<birthday>1976.2</birthday>
<phone>62775466</phone>
<skill>网络</skill>
<skill>书法</skill>
</student>
</students>

--------------------------------------------------------------------
xsl.xsl
---------------------------------------------------------------
<?xml version=/"1.0/" encoding=/"gb2312/"?>
<xsl:stylesheet xmlns:xsl=/"http://www.w3.org/tr/wd-xsl/">
<xsl:template match=/"//">
<center> <h1>学号是/"98789/"的学生的生日是:<xsl:value-of select=/"/students/student[@id=/'98789/']/birthday/"/>
</h1></center>
</xsl:template>
</xsl:stylesheet>

新闻中心

Kuao News