使用内联if语句进行XSLT转换

时间:2011-11-17 06:43:36

标签: xml xslt

我有一些XML数据,我想用XSLT转换为HTML,我大部分都是正确的。我的XML输入的问题是它包含内联if语句 / 布尔表达式,我不知道如何处理。

<section>
  <title>My Title</title>
  <paragraph>
    <phrase class="inline-if">if_xVariable || if_yVariable</phrase>
    Show this text if if_xVariable or if_yVariable is true.
  </paragraph>
  <paragraph>
    <phrase class="inline-if">if_xVariable &amp;&amp; if_yVariable</phrase>
    Show this text if if_xVariable and if_yVariable is true
  </paragraph>
  <paragraph>
    Always show this text
  </paragraph>
</section>

我一直在考虑将每个变量名称(例如if_xVariable)的xslt-vairables添加到true / false,并以某种方式检查它们。

你将如何解决这个问题?

更新这是我试过的

<xsl:template match="section/paragraph">
  <xsl:variable name="inlineif" select="phrase[@class='inline-if']"/>
    <xsl:if test="$inlineif">
      <p>
      <xsl:value-of select="."/>
      </p>
    </xsl:if>
</xsl:template>

由于我既没有指定if_xVariableif_yVariable,所以输出应该类似于

<p>
Always show this text
</p>

但我得到了所有段落的输出。

3 个答案:

答案 0 :(得分:0)

您可以使用以下

<xsl:if test="expression">
    ...some output if the expression is true...
 </xsl:if>

完整示例位于http://www.w3schools.com/xsl/xsl_if.asp

答案 1 :(得分:0)

这是xsl文件中的代码

标签中的

  <xsl:for-each select="persons/person">
  <xsl:if test="GenderElementType='combo'">
       <select name="gender">
      <option>
      <xsl:value-of select="Gender"/>
      </option>
      <xsl:if test="Gender='MALE'">
      <option>
       FEMALE
      </option>
      </xsl:if>
      <xsl:if test="Gender='FEMALE'">
      <option>
       MALE
      </option>
      </xsl:if>
      </select>
      </xsl:if>
 </xsl:for-each>

person.xml如下

 <persons>
 <person>
        <Gender>MALE</Gender>
    <GenderElementType>radio</GenderElementType>


</person>

答案 2 :(得分:0)

XSLT没有内置的表达式动态评估。 this question的答案中讨论了可能的解决方案。