xslt转换分数

时间:2013-03-27 19:36:35

标签: xslt

我有一个<fraction d="2" n="1">标记的文件。我需要将其转换为&frac12;我尝试用它来做:

<xsl:template match="fraction">
  <xsl:text>&frac</xsl:text>
    <xsl:value-of select="@n"/>
    <xsl:value-of select="@d"/>
  <xsl:text>;</xsl:text>
</xsl:template>

但我收到错误 - 可能是由于引用&amp; frac

2 个答案:

答案 0 :(得分:2)

这似乎对我有用(xslt 1.0):

<xsl:template match="/">
  <xsl:text disable-output-escaping="yes">&amp;frac</xsl:text>
  <xsl:value-of select="@n"/>
  <xsl:value-of select="@d"/>
  <xsl:text>;</xsl:text>
</xsl:template>

答案 1 :(得分:1)

不需要DOE (以及 its use isn't just bad taste !):

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:my="my:my">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <my:fractions>
  <frac14>&#188;</frac14>
  <frac12>&#189;</frac12>
  <frac34>&#190;</frac34>
  <frac18>&#8539;</frac18>
  <frac38>&#8540;</frac38>
  <frac58>&#8541;</frac58>
  <frac78>&#8542;</frac78>
 </my:fractions>

 <xsl:variable name="vFracs" select="document('')/*/my:fractions/*"/>

 <xsl:template match="fraction">
     <xsl:value-of select="$vFracs[name()= concat('frac', current()/@n, current()/@d)]"/>
 </xsl:template>
</xsl:stylesheet>

在提供的XML文档上应用此转换时:

<fraction d="2" n="1"/>

产生了想要的正确结果:

½