xslt基于特定属性为空跳过分支

时间:2017-11-08 01:13:51

标签: xslt

xlst相当新,并试图让我的头脑周围的东西.. 以下是源数据的示例(由于存在MB而严重修剪)

    <Chemical id="000023950" displayFormula="" displayName="">
    </Chemical>
    <Chemical id="000035676" displayFormula="C39-H45-N2-O6" displayName="Dimethyltubocurarine">
    </Chemical>
    <Chemical id="000036282" displayFormula="" displayName="INDEX NAME NOT YET ASSIGNED">
    </Chemical>

我要做的是将显示名称和每种化学品的ID提取到csv

现在我可以使用下面的代码提取它们 - 说实话它非常粗糙

 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" />
  <xsl:variable name="FS">
    <!-- Field seperator -->
    <xsl:text>;</xsl:text>
  </xsl:variable>
  <xsl:variable name="LT">
    <!-- Line terminator -->
    <xsl:text>&#10;</xsl:text>
  </xsl:variable>
  <xsl:strip-space elements="*" />
  <xsl:template match="/">
    <xsl:for-each select="//Chemical">
        <xsl:text>&#34;</xsl:text>
      <xsl:value-of select="@displayName" />
      <xsl:text>&#34;</xsl:text>
      <xsl:text>&#44;</xsl:text>
      <xsl:text>&#34;</xsl:text>https://chem.nlm.nih.gov/chemidplus/sid/startswith/<xsl:value-of select="@id" />
      <xsl:text>&#34;</xsl:text>
      <xsl:text>&#44;&#34;nlm&#34;</xsl:text>
      <xsl:value-of select="$LT" />
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

我的问题是...... 如何跳过displayName属性为“”或“INDEX NAME NOT YET ASSIGNED”的分支?

由于

1 个答案:

答案 0 :(得分:0)

<xsl:for-each>可以修改为

<xsl:for-each select="//Chemical[@displayName != '' and @displayName != 'INDEX NAME NOT YET ASSIGNED']">

这将根据需要过滤掉@displayName的值,只生成输出

Dimethyltubocurarine