XSLT:如果Node = A,则设置B = 1 Else B = 2

时间:2010-03-19 00:36:05

标签: xslt variables loops

我通过查看Node的值来循环。

If Node = B, then B has one of two possible meanings. 
  --If Node = A has been previously found in the file, then the value for A
    should be sent as 1.
  --If Node = A has NOT been found in the file, the the value for A should 
    be sent as 2.

where file is the xml source to be transformed

我无法弄清楚如何做到这一点。如果我使用的编程语言允许变量重新分配/更改其值,则很容易。但是,使用XSLT变量设置一次。

2 个答案:

答案 0 :(得分:10)

您提供的代码与XSLT完全无关。在问这些问题之前,请阅读一本关于XSLT的好书。

这就是众所周知的做法,我想你的问题意思是:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:template match="/">
   <xsl:variable name="vA">
     <xsl:choose>
      <xsl:when test="//B">1</xsl:when>
      <xsl:otherwise>2</xsl:otherwise>
     </xsl:choose>
   </xsl:variable>

   $vA = <xsl:value-of select="$vA"/>
 </xsl:template>
</xsl:stylesheet>

将此转换应用于以下XML文档

<c>
  <d/>
</c>

结果是

   $vA = 2

应用于此文档时

<c>
  <d>
   <B/>
  </d>
</c>

reult

   $vA = 1

获得相同结果的方法较短

  <xsl:variable name="vA" select="not(//B) +1"/>

答案 1 :(得分:0)

查看xsl:choose,xsl:when,xsl:if。你可以做到

<xsl:if test="A=1">
Set in here
</xsl:if>

<xsl:choose>
    <xsl:when test="A=1">
        <xsl:otherwise>
</xsl:choose>