【问题标题】:XSL:if test or XSL:chooseXSL:如果测试或 XSL:选择
【发布时间】:2015-07-22 19:52:00
【问题描述】:

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 测试,两列都标有 X。

xsl:if 测试结果显示:

                 YES   NO

气道已建立 X X

【问题讨论】:

  • 请发布一个可重现的示例 - 我们可以单独通过复制和粘贴进行测试。用肉眼查看您的 XML,有几个 inc_interventionprocedure/ProcedureID 节点——一些符合第一个测试,一些符合另一个。另外,你给我们看的XSLT sn -p 是无效的(双引号里面有双引号)。

标签: xslt


【解决方案1】:

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>

【讨论】:

  • 这就像一个魅力。令人惊讶的是,一个小小的改变可以带来多大的改变。谢谢:-)
【解决方案2】:

您当前的测试格式不正确,因为引号中嵌入了引号。但主要问题是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 元素上。

【讨论】:

  • "但主要问题是 .." 这将不会产生声称的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-13
  • 2018-08-08
相关资源
最近更新 更多