前段时间写了个邮件xml的xsl

原创 2004年07月01日 13:26:00

前段时间给个客户写了个信封xml的xsl。在一个信封当中,邮政编码是分别显示在一个一个的格子当中的,因此具体实现上需要把邮政编码字符串分别填写到table 的td中,它的解析template如下:

<!-- ********************  显示邮政编码到一个有边框的Table中 ******************** -->
<xsl:template match="邮编">
 <table width="150" border="0" cellpadding="2" cellspacing="0" class="Postalcode">
  <tr>
 <!-- 把邮政编码字符串从头到尾遍历一遍,每个号码放到一个td中 -->
   <xsl:call-template name="eachPostalCodeNum">
    <xsl:with-param name="CodePositon" select="1"/> 
    <xsl:with-param name="PostalCodeStr" select="string(.)"/> 
   </xsl:call-template>
  </tr>
 </table>
</xsl:template>

<!-- ********* 遍历邮政编码的一个Template,参数CodePosition是当前字符位置,参数PostalCodeStr是字符串参数,通过递归方式调用自身来循环字符串 ************* -->
<xsl:template name="eachPostalCodeNum">
 <xsl:param name="CodePositon"/>
 <xsl:param name="PostalCodeStr"/>
 <xsl:variable name="CodeLen" select="string-length($PostalCodeStr)"/>
 
 <td class="Postalcode"><xsl:value-of select="substring($PostalCodeStr,$CodePositon,1)"/></td>
 <xsl:if test="$CodePositon &lt; $CodeLen">
  <xsl:call-template name="eachPostalCodeNum">
   <xsl:with-param name="CodePositon" select="$CodePositon + 1"/> 
   <xsl:with-param name="PostalCodeStr" select="$PostalCodeStr"/> 
  </xsl:call-template>
 </xsl:if>
</xsl:template>

由于xsl中的变量一旦被定义了,在同一个作用域里就不能被重新定义了,因此要在xsl/xslt中作类似于for(int i=1;i<max;i++){...}类似的循环就无法实现,但是可以用调用自身的方法了实现这种有变量增减的循环。

 

 

完整的xml和xsl如下:

<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/">
<html xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"/>
<title>信封</title>
<style type="text/css">
 v/:* {
 BEHAVIOR: url(#default#VML)
}
table {
 font-family: "宋体";
 font-size: 14px;
}
table.Postalcode {
 border-top: 1px solid #990000;
 border-right: 0px solid #990000;
 border-bottom: 1px solid #990000;
 border-left: 1px solid #990000;
}
td.Postalcode {
 border-top: 0px solid #990000;
 border-right: 1px solid #990000;
 border-bottom: 0px solid #990000;
 border-left: 0px solid #990000;
 text-align: center;
}
td.inputCol {
 border-top-width: 0px;
 border-right-width: 0px;
 border-bottom-width: 1px;
 border-left-width: 0px;
 border-top-style: solid;
 border-right-style: solid;
 border-bottom-style: solid;
 border-left-style: solid;
 border-top-color: #666666;
 border-right-color: #666666;
 border-bottom-color: #666666;
 border-left-color: #666666;
 width: 320px;
 height: 40px;
 font-family: "黑体";
 font-size: 16px;
}
#divMailer{
 width:520px;
 background-color: #FFFFFF;
 position: absolute;
}
</style>
</head>

<body>
<script language="JavaScript">
<![CDATA[
<!--
function window_onload(){
 mailerSkin.style.height = tlbMailer.clientHeight + 10;
}
window.onload = window_onload;
//-->
]]>
</script>
<!-- ***************** 信封主体用一个表格排版,用VML显示信封Skin&&Shaow *****************-->
<v:rect id="mailerSkin" strokecolor="black" fillcolor="white" style="position:relative;left:20;top:5;width:550px;height:320px;z-index:9">
 <v:shadow on="t" type="single" color="silver" offset="5px,5px"></v:shadow>
    <v:textbox id="mailerContent" inset="1,1,1,1">
  <table width="550" border="0" align="center" cellpadding="6" cellspacing="0" id="tlbMailer">
    <tr>
      <td><xsl:apply-templates select="*/收信人/邮编"/></td>
    </tr>
    <tr>
      <td><xsl:apply-templates select="*/收信人"/></td>
    </tr>
    <tr>
      <td>&#160;</td>
    </tr>
    <tr>
      <td><xsl:apply-templates select="*/发信人"/></td>
    </tr>
    <tr>
      <td>&#160;</td>
    </tr>
    <tr>
      <td align="right"><xsl:apply-templates select="*/发信人/邮编"/></td>
    </tr>
  </table>
 </v:textbox>
</v:rect>
</body>
</html>
</xsl:template>

<!-- ********************  显示邮政编码到一个有边框的Table中 ******************** -->
<xsl:template match="邮编">
 <table width="150" border="0" cellpadding="2" cellspacing="0" class="Postalcode">
  <tr>
 <!-- 把邮政编码字符串从头到尾遍历一遍,每个号码放到一个td中 -->
   <xsl:call-template name="eachPostalCodeNum">
    <xsl:with-param name="CodePositon" select="1"/> 
    <xsl:with-param name="PostalCodeStr" select="string(.)"/> 
   </xsl:call-template>
  </tr>
 </table>
</xsl:template>

<!-- ********* 遍历邮政编码的一个Template,参数CodePosition是当前字符位置,参数PostalCodeStr是字符串参数,通过递归方式调用自身来循环字符串 ************* -->
<xsl:template name="eachPostalCodeNum">
 <xsl:param name="CodePositon"/>
 <xsl:param name="PostalCodeStr"/>
 <xsl:variable name="CodeLen" select="string-length($PostalCodeStr)"/>
 
 <td class="Postalcode"><xsl:value-of select="substring($PostalCodeStr,$CodePositon,1)"/></td>
 <xsl:if test="$CodePositon &lt; $CodeLen">
  <xsl:call-template name="eachPostalCodeNum">
   <xsl:with-param name="CodePositon" select="$CodePositon + 1"/> 
   <xsl:with-param name="PostalCodeStr" select="$PostalCodeStr"/> 
  </xsl:call-template>
 </xsl:if>
</xsl:template>

<!-- ********************  显示收信人的相关信息 ******************** -->
<xsl:template match="收信人">
 <table width="420" border="0" cellspacing="0" cellpadding="2">
       <tr>
         <td align="right" valign="bottom">&#160;</td>
         <td align="right" valign="bottom">收信人地址</td>
       <td valign="bottom" class="inputCol"><xsl:value-of select="地址"/></td>
      </tr>
      <tr>
        <td align="right" valign="bottom">&#160;</td>
        <td align="right" valign="bottom">收信人姓名</td>
        <td valign="bottom" class="inputCol"><xsl:value-of select="姓名"/></td>
      </tr>
    </table>
</xsl:template>

<!-- ********************  显示发信人的相关信息 ******************** -->
<xsl:template match="发信人">
 <table width="420" border="0" align="right" cellpadding="2" cellspacing="0">
        <tr>
         <td align="right" valign="bottom">发信人地址</td>
       <td valign="bottom" class="inputCol"><xsl:value-of select="地址"/></td>
       <td valign="bottom">&#160;</td>
      </tr>
      <tr>
        <td align="right" valign="bottom">发信人姓名</td>
        <td valign="bottom" class="inputCol"><xsl:value-of select="姓名"/></td>
        <td>&#160;</td>
      </tr>
    </table>
</xsl:template>
</xsl:stylesheet>

 

 

<?xml version="1.0" encoding="GB2312"?>
<?xml-stylesheet type="text/xsl" href="Mailer.xsl"?>
<信封>
 <收信人>
  <姓名>收信人</姓名>
  <邮编>100085</邮编>
  <地址>北京市xxxx公司</地址>
 </收信人>
 <发信人>
  <姓名>发信人</姓名>
  <邮编>100085</邮编>
  <地址>北京市xxxx公司</地址>
 </发信人>
</信封>

利用XSL双向转换XML文档

在实际应用中,经常要用到XML文件来存储相关的信息.而XML文件可以有三种结构:1:层次结构.DBTableName>  TableInfo>    Name>SZYLTJName>    Type>...
  • erqie
  • erqie
  • 2006年12月07日 14:59
  • 1313

xml与xsl的转换

xml文档的一大特点是可以向多种格式的文档进行转换。比如,从一种逻辑结构的xml向另一种逻辑结构的xml转换,或是转换为可浏览的html文档等。这种xml文档的数据格式转换功能由可扩展样式单语言(xs...
  • lvyuan30276
  • lvyuan30276
  • 2016年01月05日 23:28
  • 1361

笑谈XML,xsd与xsl文件的区别

如果说xml是一叠钞票,xsd就是验钞机,看看里面有没有假钞,而xsl是点钞机,看看到底是多少钱。用xml可以不用xsd,就像花钱的时候不一定要验钞一样,但是收钱的人一般 是想要验的。而花钱的时候不能...
  • qq_net
  • qq_net
  • 2007年06月07日 10:51
  • 2575

xsl与xml转换示例

java xml,xsl,html文件转换   java文件代码: package com.test; import java.io.ByteArrayInputStream; imp...
  • lvyuan30276
  • lvyuan30276
  • 2016年01月05日 23:41
  • 2510

xml/xsl(1):简单使用XSL显示XML样例

test1.xml tangsheng wukong bajie sasheng bailong test1.xsl De...
  • oldmtn
  • oldmtn
  • 2014年04月28日 11:03
  • 2149

XML文件与xsl文件的作用与关系

XML文件的发明可以说是计算机领域的一大进步,有着说不清的好处,比如格式规范,跨平台等。XML文件的主要作用是数据的载体,用于承载数据。跟XML相关的格式文件还有一大堆,这里我们慢慢来说清楚。   ...
  • sundacheng1989
  • sundacheng1989
  • 2016年08月09日 14:01
  • 4439

用XSL把XML的数据转换成完美的多列表格形式

摘要:本文通过实际的例子来说明如何在XSL中实现对XML数据转换成完美的多列表格。在利用XSL对XML进行转换时,有时候需要把XML转换成多列的Table元素,这个问题经常会困扰许多人,如果不生成Ta...
  • myali88
  • myali88
  • 2004年11月16日 21:41
  • 1608

JavaScript与XML XSL的综合使用

1.当用xsl来显示xml内容时,要注意在借助xsl文档来定义样式时:    在html文档中有     http://127.0.0.1:7001/MagazineResearchStageWeb/...
  • gaolongbiti
  • gaolongbiti
  • 2005年05月13日 18:29
  • 1351

xsl解析xml

当使用view1.xsl 解析 xml文档时,需要在xml文档里添加:  W3C XSLT Documentation:http://www.w3.org/TR/xslt XML: XSLT 专题:h...
  • spring21st
  • spring21st
  • 2010年04月29日 23:13
  • 1434

Chrome无法用xsl显示xml文档

今天在做一个xml的小试验时,发现Chrome竟然无法显示经过xsl修饰的文档!!这么高级的浏览器不应该存在这样的情况啊。经过一翻折腾加google后,发现确实是因为Chrome太高级了所以无法显示:...
  • jnuyanfa
  • jnuyanfa
  • 2016年04月25日 22:43
  • 1655
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:前段时间写了个邮件xml的xsl
举报原因:
原因补充:

(最多只允许输入30个字)