xml杂碎知识

 1。Xpath认可4种基本的数据类型:节点集,布尔值,数字,字符串。

最普通的表达式类型就是位置路径,它由多个单步执行组成,每个步都包含以下3个基本的部分:轴:定义路径方向;节点测试:选择特定节点集;谓词:提供对节点集的测试条件(可选)。位置步的基本语法是:axis::node-test[predicate]

共有13种定义方向的轴:(默认为child轴)

child按顺序选中上下文节点所有的直接子节点,不包括对属性节点或名称空间节点的选择

employees/child::employee/child::*

descendant选择当前节点的所有后代,允许选择属性节点或名称空间节点

employees/child::employee/child::contact/descendant::*

parent只选择当前节点的直接父节点//*/parent::node()/tilte

ancestor按文档顺序的相反方向选择当前节点的所有祖先节点,始终包括根节点

employees/employee/contact/name/ancestor::*

following-sibling按文档顺序选择文档中此后出现的当前节点的所有兄弟节点

employees/employee/following-sibling::*/contact/name

preceding-silbling按与文档顺序相反的方向选择文档中此前出现的当前节点的所有兄弟节点

employees/employee/preceding-sibling::*

following除当前节点的所有后代节点外,按顺序选择文档中当前节点之后出现的所有节点,不包括属性节点或名称空间节点.employees/employee/following::*

preceding按与文档方向顺序相反的方向选择文档中在当前节点之前出现的所有节点。employees/employee/preceding::*

 

attribute选择当前节点的所有属性节点employees/employee/attribute::*

namespace选择当前节点的所有名称空间节点,若无则该轴为空

employees/head:header/namespace::*

self选择当前节点employees/employee/contact/email/self::*

descendant-or-self按文档顺序选择当前节点及其所有后代节点,不包括属性节点或名称空间节点employees/child::employee/child::contact/descendant-or-self::*

ancestor-or-self按文档顺序选择当前节点及其所有祖先节点

employees/employee/contact/name/ancestor-or-self::*

 

节点测试允许从指定轴选择具体的元素或节点类型,方法有

node-name用于选择它自身的节点名称

*用于选择任意元素节点的通配符

comment()选择注释节点

node()选择任意类型的节点

precessing-instruction()选择处理指令节点

text()选择文本节点

谓词是一种布尔表达式,允许进一步过滤由轴和节点集确定的节点集

 

缩写:

node-name(等效:child::node-name)

@name(等效:attribute:name)

.(等效:self::node())

..(等效:parent:node())

//(等效:/descendant-or-self:node()/)

2。

xslt中使用javascript(注意的是脚本中若有――字符,则应该把该代码从XSLT中取出,放入一个独立的脚本文件中)

<?xml version=”1.0”?>

<xsl:stylesheet version=”1.0” xmlns:xsl=http://www.w3.org/1999/xsl/transform >

  <xsl:output method=”html” indent=”yes” encoding=”UTF-8” />

  <xsl:template match=”/”>

    <html>

      <head>

<script language=”javaScript”>

<xsl:comment>

      var varName=’pull’;

      var NS4=(document.layers)?1:0;

      var IE=(document.all)?1:0;

      var DOM=(parseInt(navigator.appVersion)&gt;=5)?1:0;

      var MAC=((navigator.appVersion.indexOf(“PPC”)&gt;0)||

(navigator.appVersion.indexOf(“Mac”)&gt;0))?1:0

      function showLayer(){return;}

      function HideLayer(){return;}

      if(document.layers){

         appVer=navigator.appVersion.substring(0,4);

         if(appVer&lt;4.06)NS4=0;

      }

      if(NS4||IE||DOM)pullDown=1;

      if(!pullDown)event=null;

//</xsl:comment>

</script>

    <title>creating a javascript</title>

    </head>

    <body>

     some text here!

    </body>

    </html>

  </xsl:template>

</xsl:stylesheet>

或者可以这样:

<script language=”javascript”>

<xsl:attribute name=”src”>myscript.js</xsl:attribute>

<xsl:comment>comment for browsers having trouble with script element</xsl:comment>

</script>

 

3。

xsl中的一些指令

xsl:apply-imports引入模板

xsl:apply-templates识别待处理的节点集,调用相应的模板规则

xsl:attribute创建属性

xsl:call-template调用一个指定的模板

xsl:choose必有一个xsl:when用于选择

xsl:comment 创建注释

xsl:copy浅复制

xsl:copy-of深复制

xsl:element创建元素

xsl:fallback用来确保正向兼容

xsl:for-each利用XPath表达式选择节点集

xsl:if满足条件时实例化该模板实体

xsl:message输出一个消息

xsl:mumber插入一个格式化整数

xsl:processing-instruction创建一个处理指令

xsl:text计算xslt结果树中的文本节点

xsl:value-of将单个源节点的字符串复制给输出树

xsl:variable可用做最高级元素或模板中的指令

'''''''''''''''''''''''''''''''''''''''

 

例子:

 

xsl生成超链接:

<a><xsl:attribute name="href">Name.asp</xsl:attribute><xsl:value-of select="name" /></a>

指令:

<xsl:processing-instruction name=”xml-stylesheet”>href=”employees.css”

  type=”text/css”</xsl:processing-instruction>

结果:<?xml-stylesheet href=”employees.css” type=”text/css” ?>

创建文字正文:

<xsl:text>some content would be nice</xsl:text>

 

 

应用xsl:for-each:

<xsl:for-each select=”*”>

  <xsl:choose>

    <xsl:when test=”name(parent::*)=’name’”>

       <xsl:value-of select=”.” />

       <xsl:text> </xsl:text>

    </xsl:when>

    <xsl:otherwise>

       <xsl:choose>

         <xsl:when test=”name()=’street’”>

            <xsl:value-of select=”.” />

            <br />

         </xsl:when>

         <xsl:when test=”name()=’city’”>

            <xsl:value-of select=”.” />

            <xsl:text>,</xsl:text>

         <xsl:when>

         <xsl:otherwise>

         <xsl:value-of select=”.” />

         <xsl:text>,</xsl:text>

         </xsl:otherwise>

       </xsl:choose>

    </xsl:otherwise>

   </xsl:choose>

 <xsl:for-each>

    

使用mode属性促成多路处理:

<xsl:template match=”/”>

    <xsl:apply-templates select=”employees/employee” mode=”programming” />

</xsl:template>

 

<xsl:template match=”employee” mode=”programming”>

    <xsl:if test=”@dept=’programming’”>

    <xsl:value-of select=”contact/name” />

    </xsl:if>

</xsl:template>

 

<xsl:template match=”employee” mode=”training”>

    <xsl:if test=”@dept=’training’”>

    <xsl:value-of select=”contact/name” />

    </xsl:if>

</xsl:template>

xslt中使用javascript(注意的是脚本中若有――字符,则应该把该代码从XSLT中取出,放入一个独立的脚本文件中)

<?xml version=”1.0”?>

<xsl:stylesheet version=”1.0” xmlns:xsl=http://www.w3.org/1999/xsl/transform >

  <xsl:output method=”html” indent=”yes” encoding=”UTF-8” />

  <xsl:template match=”/”>

    <html>

      <head>

<script language=”javaScript”>

<xsl:comment>

      var varName=’pull’;

      var NS4=(document.layers)?1:0;

      var IE=(document.all)?1:0;

      var DOM=(parseInt(navigator.appVersion)&gt;=5)?1:0;

      var MAC=((navigator.appVersion.indexOf(“PPC”)&gt;0)||

(navigator.appVersion.indexOf(“Mac”)&gt;0))?1:0

      function showLayer(){return;}

      function HideLayer(){return;}

      if(document.layers){

         appVer=navigator.appVersion.substring(0,4);

         if(appVer&lt;4.06)NS4=0;

      }

      if(NS4||IE||DOM)pullDown=1;

      if(!pullDown)event=null;

//</xsl:comment>

</script>

    <title>creating a javascript</title>

    </head>

    <body>

     some text here!

    </body>

    </html>

  </xsl:template>

</xsl:stylesheet>

或者可以这样:

<script language=”javascript”>

<xsl:attribute name=”src”>myscript.js</xsl:attribute>

<xsl:comment>comment for browsers having trouble with script element</xsl:comment>

</script>

 

3。

xsl中的一些指令

xsl:apply-imports引入模板

xsl:apply-templates识别待处理的节点集,调用相应的模板规则

xsl:attribute创建属性

xsl:call-template调用一个指定的模板

xsl:choose必有一个xsl:when用于选择

xsl:comment 创建注释

xsl:copy浅复制

xsl:copy-of深复制

xsl:element创建元素

xsl:fallback用来确保正向兼容

xsl:for-each利用XPath表达式选择节点集

xsl:if满足条件时实例化该模板实体

xsl:message输出一个消息

xsl:mumber插入一个格式化整数

xsl:processing-instruction创建一个处理指令

xsl:text计算xslt结果树中的文本节点

xsl:value-of将单个源节点的字符串复制给输出树

xsl:variable可用做最高级元素或模板中的指令

'''''''''''''''''''''''''''''''''''''''

 

例子:

 

xsl生成超链接:

<a><xsl:attribute name="href">Name.asp</xsl:attribute><xsl:value-of select="name" /></a>

指令:

<xsl:processing-instruction name=”xml-stylesheet”>href=”employees.css”

  type=”text/css”</xsl:processing-instruction>

结果:<?xml-stylesheet href=”employees.css” type=”text/css” ?>

创建文字正文:

<xsl:text>some content would be nice</xsl:text>

 

 

应用xsl:for-each:

<xsl:for-each select=”*”>

  <xsl:choose>

    <xsl:when test=”name(parent::*)=’name’”>

       <xsl:value-of select=”.” />

       <xsl:text> </xsl:text>

    </xsl:when>

    <xsl:otherwise>

       <xsl:choose>

         <xsl:when test=”name()=’street’”>

            <xsl:value-of select=”.” />

            <br />

         </xsl:when>

         <xsl:when test=”name()=’city’”>

            <xsl:value-of select=”.” />

            <xsl:text>,</xsl:text>

         <xsl:when>

         <xsl:otherwise>

         <xsl:value-of select=”.” />

         <xsl:text>,</xsl:text>

         </xsl:otherwise>

       </xsl:choose>

    </xsl:otherwise>

   </xsl:choose>

 <xsl:for-each>

    

使用mode属性促成多路处理:

<xsl:template match=”/”>

    <xsl:apply-templates select=”employees/employee” mode=”programming” />

</xsl:template>

 

<xsl:template match=”employee” mode=”programming”>

    <xsl:if test=”@dept=’programming’”>

    <xsl:value-of select=”contact/name” />

    </xsl:if>

</xsl:template>

 

<xsl:template match=”employee” mode=”training”>

    <xsl:if test=”@dept=’training’”>

    <xsl:value-of select=”contact/name” />

    </xsl:if>

</xsl:template>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值