XML学习笔记(三)xml与xsl 附xml解析器

来源:互联网 发布:怎样读古书 知乎 编辑:程序博客网 时间:2024/06/05 15:01

1.通過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>

做完这个例子先总结一下:
在XSL的定义方法其实是一个HTML的全显示格式.我们可以用DW直观的编辑好.再加入代码.
这里XSL我们可以理解成为一个模板.
其主要的定义方法有一个规则:
以后我们再写XSL时就可以把这东东COPY出来了.不用老是对着书打.呵...
--------------------------------------------------------------
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
 <xsl:template match="/">
 
</xsl:template>
</xsl:stylesheet>


2.输出某节点下的所有内容..
上一例子我们成功地用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>

用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>


有时候,XML文件中引用的txt文件也需要说明字节码类型,比如要引入1.txt文件,我们在1.txt文件中也使用XML指令如:
<?xml version="1.0" encoding="GB2312"?>
<persion>
&1.txt;
</persion>

1.txt文件如下:
<?xml version="1.0" encoding="GB2312"?>
<name>北岛</name>
<sex>男</sex>
<spouse>无</spuse>

其中1.txt文件中如果没有第一行指令,就会出现你说的问题,可是加上他就没事了,试试吧

<?xml version="1.0" encoding="utf-8" ?>
<个人简历>
<姓名>王晶</姓名>
<性别>GG</性别>
<爱好>玩</爱好>
<等级>XML菜鸟</等级>
<目标>金钱地位女人</目标>
</个人简历>

[U][I]utf-8[/I][/U]是西欧字符,后面的汉字标识不显示!!

xml文件具有易读性,是对于人来说的,计算机的程序语言要处理xml语言,就需要有一个解析器。xml解析器是读取并且向其他应用程序提供读取xml文档的应用程序模块。
种类很多,可以开发自己的解析器。
xerces下载:http://www.apache.org/dyn/closer.cgi/xml/xerces-j/
IBM 的 XML4C 解析器可从 www.alphaWorks.ibm.com/tech/xml4c 获得。
James Clark 的 C++ 解析器,expat,可从 www.jclark.com/xml/expat.html 获得

NSL-Domtree - an OpenSource DOM/SAX XML API
http://netsoft.cnstar.ca/topic.php?a=disp&id=8

解释器?通常是称为解析器。
就是把XML码流的内容提取出来,而这几乎是所有XML应用的第一步。只有对XML实现了解析,我们才能下一步具体应用中来应用这些数据。
从解析数据模型来看,现在常用的是DOM、SAX模型。
现在有很对开源的解析器可直接使用,例如libxml2,Xerces、tinyxml等,微软也提供MSXML,不过不是开源。
视具体应用,选择不同的解析器,当然你也可以自己写解析器。

domtree is a set of XML manuplate API, it can handle XML document using DOM API, SAX API, and it also support DTD validation:
http://netsoftlab.ca/?q=node/29