XSL:如果测试或XSL:选择

时间:2015-07-22 08:42:43

标签: xslt

XML:

<?xml version="1.0" encoding="utf-8"?>
<NewDataSet>
  <inc_incident>
    <inc_interventionprocedure>
      <ProcedureID>CPR</ProcedureID>
    </inc_interventionprocedure>
    <inc_interventionprocedure>
      <ProcedureID>Airway-Endotracheal Intubation</ProcedureID>
    </inc_interventionprocedure>
    <inc_interventionprocedure>
      <ProcedureID>Capnography</ProcedureID>
    </inc_interventionprocedure>
  </inc_incident>
</NewDataSet>

XSL:

<xsl:if test="starts-with(inc_interventionprocedure/ProcedureID, "Airway")">
 <fo:inline>X</fo:inline>
</xsl:if>
<xsl:if test="not(starts-with(inc_interventionprocedure/ProcedureID, "Airway"))">
  <fo:inline>X</fo:inline>
</xsl:if>

我想表明,如果任何节点以“Airway”开头,则在“YES”栏中以“X”开头,如果“NO”栏中没有,则标记“X”。使用此xsl:if测试两列都标有Xs。

xsl的结果:如果测试显示:

                 YES   NO

Airway成立X X

2 个答案:

答案 0 :(得分:0)

由于引号内嵌有引号,因此您当前的测试格式不正确。但主要问题是starts-with将字符串作为第一个参数,而不是节点集。在XSLT 1.0中,它将使用第一个节点的值。在XSLT 2.0中,您会收到错误。

你的表达应该看起来像这样

<xsl:if test="inc_interventionprocedure/ProcedureID[starts-with(., 'Airway')]">

理想情况下,您可以在此使用xsl:choose以避免在not

内再次编写整个表达式

试试这个:

    <xsl:choose>
        <xsl:when test="inc_interventionprocedure/ProcedureID[starts-with(., 'Airway')]">
            <fo:inline>YES</fo:inline>
        </xsl:when>
        <xsl:otherwise>
            <fo:inline>NO</fo:inline>
        </xsl:otherwise>
    </xsl:choose>

这假设您位于inc_incident元素上。

答案 1 :(得分:0)

Tim C提供的解决方案应该稍作改动。

<xsl:choose>
    <xsl:when test="inc_interventionprocedure/ProcedureID[starts-with(., 'Airway')]">
        <fo:inline>X</fo:inline>
        <fo:inline>&nbsp;</fo:inline>
    </xsl:when>
    <xsl:otherwise>
        <fo:inline>&nbsp;</fo:inline>
        <fo:inline>X</fo:inline>
    </xsl:otherwise>
</xsl:choose>