xsl 操作

XSL 指扩展样式表语言(EXtensible Stylesheet Language)。

万维网联盟 (W3C) 开始发展 XSL 的原因是:存在着对于基于 XML 的样式表语言的需求。

说白了就是友好的去显示一个xml文档

XSL - 不仅仅是样式表语言

 

XSL 包括三部分:

XSLT

一种用于转换 XML 文档的语言。

XSLT 是 XSL 中最重要的部分。

XSLT 用于将一种 XML 文档转换为另外一种 XML 文档,或者可被浏览器识别的其他类型的文档,比如 HTML 和 XHTML。通常,XSLT 是通过把每个 XML 元素转换为 (X)HTML 元素来完成这项工作的。

通过 XSLT,您可以向或者从输出文件添加或移除元素和属性。您也可重新排列元素,执行测试并决定隐藏或显示哪个元素,等等。

描述转化过程的一种通常的说法是,XSLT 把 XML 源树转换为 XML 结果树

XPath

一种用于在 XML 文档中导航的语言。

XSL-FO

一种用于格式化 XML 文档的语言。


正确的样式表声明

  把文档声明为 XSL 样式表的根元素是 <xsl:stylesheet> 或 <xsl:transform>。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> //声明在文档的最前面

或者

<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">//这两种格式都可以  任选一种

如果我们想访问XSLT 的元素和属性,特性什么的,我们必须在文档顶端声明 XSLT 命名空间。

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

指向的是xslt的官方命名空间,如果引入和这个命名空间那就要包含属性 version="1.0"。

从一个原始的 XML 文档开始

  我们现在要把下面这个 XML 文档转换为 XHTML:

复制代码

<?xml version="1.0" encoding="ISO-8859-1"?>
<root>
  <user> 
    <name>张三</name> 
    <age>12</age> 
    <pwd>123</pwd> 
    <sex>男</sex>
  </user>
</root>
 

复制代码

创建 XSL 样式表

复制代码

<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <body>
    <h2>用户信息</h2>
    <table border="1">
    <tr bgcolor="#9acd32">
      <th align="left">用户名</th>
      <th align="left">密码</th>
    </tr>
    <xsl:for-each select="root/user">  
    <tr>
      <td><xsl:value-of select="name"/></td> 
      <td><xsl:value-of select="pwd"/></td> 
    </tr>
    </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>

</xsl:stylesheet>    

复制代码

把 XSL 样式表链接到 XML 文档

现在xsl (显示格式)和xml(数据)都有了 怎么把他们两个链接到一起呢

向 XML 文档添加 XSL 样式表引用:

<?xml-stylesheet type="text/xsl" href="xsl的文件"?>

  这里我对咱们上个例子的xsl简要的解释一下

 

复制代码

<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">//XSL 样式表由一个或多套被称为模板(template)的规则组成。每个模板含有当某个指定的节点被匹配时所应用的规则。
                match 属性的值是 XPath 表达式(举例,match="/" 定义整个文档)。意思也就是匹配xml文件的(从根开始)
  <html>
  <body>
    <h2>用户信息</h2>
    <table border="1">
    <tr bgcolor="#9acd32">
      <th align="left">用户名</th>
      <th align="left">密码</th>
    </tr>
    <xsl:for-each select="root/user">  //<xsl:for-each> 元素可用于选取指定的节点集中的每个 XML 元素。
                         select 属性的值是一个 XPath 表达式。此表达式的工作方式类似于定位某个文件系统,在其中正斜杠可选择子目录。
                        <xsl:for-each> 元素还可以加过滤<xsl:for-each select="root/user[age='12']"> (意思取的是子节点当中年龄12的)
                         合法的过滤运算符:
                                :=  (等于) 
                                :!= (不等于)
                                :&lt; (小于)
                                :&gt; (大于)    
    
<xsl:sort select="age"/>             //如需对结果进行排序,只要简单地在 XSL 文件中的 <xsl:for-each> 元素内部添加一个 <xsl:sort> 元素:
                                
<xsl:sort select="age"/> 
  
<xsl:if test="age &gt; 10">          //如需添加有条件的测试,请在 XSL 文件中的 <xsl:for-each> 元素内部添加 <xsl:if> 元素
                     
test
:意思是条件

    <tr>
      <td><xsl:value-of select="name"/></td> //<xsl:value-of> 元素,<xsl:value-of> 元素用于提取某个选定节点的值,并把值添加到转换的输出流中:
                            select 属性的值是一个 XPath 表达式。此表达式的工作方式类似于定位某个文件系统,在其中正斜杠可选择子目录。
                                当我在 <xsl:for-each> 元素可省略从根节点找直接在 <xsl:for-each> 元素下面找
      <td><xsl:value-of select="pwd"/></td> 
    </tr>
  
</xsl:if>

   </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>

</xsl:stylesheet> 


还可以添加多重判断



<?xml version="1.0" encoding="iso-8859-1"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <html>
      <body>
        <h2>用户信息</h2>
        <table border="1">
          <tr bgcolor="#9acd32">
            <th align="left">用户名</th>
            <th align="left">密码</th>
          </tr>
          <xsl:for-each select="root/user">
            <tr>
        
<xsl:choose> 
        <xsl:when test="age &gt; 20"> //多重判断 判断我的年龄大于20那么就在醒目右面加一个男人

              <td>
                <xsl:value-of select="name"/><h6>男人</h6>
              </td>
       
</xsl:when>
       
<xsl:when test="age &lt; 20 ">
  
        <xsl:value-of select="name"/><h6>男孩</h6>//如果是20以下加一个男孩
       
</xsl:when>
       
<xsl:otherwise>    //入伙上面两种都不是就加一识别不了
        
<xsl:value-of select="name"/><h6>识别不了年龄</h6>

       
</xsl:otherwise>

              <td>
                <xsl:value-of select="pwd"/>
              </td>
            </tr>
       
</xsl:otherwise>
            </xsl:choose>

          </xsl:for-each>
        </table>
      </body>
    </html>
  </xsl:template>

</xsl:stylesheet>

复制代码

XPath 语法

XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。

下面列出了最有用的路径表达式:

复制代码

nodename:选取此节点的所有子节点。
/              : 从根节点选取。
//             :从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
.               :选取当前节点。
                :选取当前节点的父节点。
..              :选取当前节点的父节点
@              : 选取属性。

复制代码

猜你喜欢

转载自blog.csdn.net/liuchaoxuan/article/details/82556633
xsl