以文本方式查看主题

-  W3CHINA.ORG讨论区 - 语义网·描述逻辑·本体·RDF·OWL  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  用XSLT转换时怎样增加说明列?  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=76527)


--  作者:trombone
--  发布时间:8/28/2009 4:52:00 PM

--  用XSLT转换时怎样增加说明列?
假设有如下XML要转换为表格
<?xml version="1.0" encoding="GBK" ?>
<test>
<person>
<name>A</name>
<sex>0</sex>
<marriage>1</marriage>
</person>
<person>
<name>B</name>
<sex>1</sex>
<marriage>0</marriage>
</person>
</test>
要用XSLT转换为
    <table>
     <tr>
        <td>姓名</td>
        <td>性别(值)</td>
        <td>性别(说明)</td>
        <td>婚否(值)</td>
        <td>婚否(说明)</td>
      </tr>
      <tr>
        <td>A</td>
        <td>0</td>
        <td>男</td>
        <td>1</td>
        <td>已婚</td>
      </tr>
      <tr>
        <td>B</td>
        <td>1</td>
        <td>女</td>
        <td>0</td>
        <td>未婚</td>
      </tr>
    </table>
这种形式
我想实现的是后面的列说明是根据同一行字段不同而返回不同的字段说明,比如字段值=1的,在性别里代表女而在婚否里表示的是已婚。可我不知道这个xslt应该怎么写。哪位大虾能帮帮我
--  作者:hexun831012
--  发布时间:8/28/2009 8:01:00 PM

--  
<xsl:if test="sex = '0'">男</xsl:if>
--  作者:Qr
--  发布时间:8/28/2009 8:52:00 PM

--  
我把代码细化得有点过分了,不过,如果你能理解的话,可以发现里面蕴含了2、3种实现的方法,
<xsl:template match="sex">
 <xsl:apply-templates/>
 <xsl:apply-templates mode="sex"/>
</xsl:template>

<xsl:template match="marriage">
 <xsl:apply-templates/>
 <xsl:apply-templates mode="marriage"/>
</xsl:template>

<xsl:template match="text()" mode="sex">
 <td>
  <xsl:choose>
  <xsl:when test=".=0">男</xsl:when>
  <xsl:otherwise>女</xsl:otherwise>
  </xsl:choose>
 </td>
</xsl:template>

<xsl:template match="text()" mode="marriage">
 <td>
  <xsl:choose>
  <xsl:when test=".=0">未婚</xsl:when>
  <xsl:otherwise>已婚</xsl:otherwise>
  </xsl:choose>
 </td>
</xsl:template>

<xsl:template match="text()">
 <td><xsl:value-of select="."/></td>
</xsl:template>


--  作者:trombone
--  发布时间:8/31/2009 9:11:00 PM

--  
还没看明白,我慢慢研究。多谢楼上赐教。
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
42.969ms