проблема с выводом xslt - PullRequest
       1

проблема с выводом xslt

1 голос
/ 21 ноября 2010

В файле .xml у меня примерно так:

<function>true</function>

В схеме я определил ее как логическое значение.Так что теперь, это работает правильно.НО для XSLT-файла, т.е. .xsl,

Ответы [ 2 ]

3 голосов
/ 21 ноября 2010

Вы можете использовать xsl:choose:

<td>
  <xsl:choose>
    <xsl:when test="function = 'true'">@</xsl:when>
    <xsl:otherwise>&#32;</xsl:otherwise>
  </xsl:choose>
</td>
0 голосов
/ 21 ноября 2010

Это можно сделать очень просто, совсем не требуя условных инструкций XSLT и полностью в духе XSLT (push-style):

Это преобразование:

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

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="function/text()[.='true']">@</xsl:template>
 <xsl:template match="function/text()[not(.='true')]">
   <xsl:text> </xsl:text>
 </xsl:template>

 <xsl:template match="function">
  <td><xsl:apply-templates/></td>
 </xsl:template>
</xsl:stylesheet>

при применении к следующему документу XML :

<function>true</function>

дает требуемый, правильный результат :

<td>@</td>

Когда такое же преобразование применяется к следующему XML-документу :

<function>false</function>

снова получается правильный, требуемый результат :

<td> </td>

Наконец , используя взлом (в XSLT 2.0 / XPath 2.0 это не обязательно), мы можем использовать только один шаблон:

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

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="function">
  <td>
   <xsl:value-of select=
   "concat(substring('@', 1 div (.='true')),
           substring(' ', 1 div not(.='true'))
          )
   "/>
   </td>
 </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...