如何添加用查找表检查xml数据的条件

时间:2011-08-01 15:09:55

标签: xslt

我想问。有可能添加条件,它将使用查找表检查xml数据,如果我们在查找表中没有值,则将const 8添加到输出中? xslt代码:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="Department" match="Department" use="../Collection"/>
    <xsl:template match="/">
    <document>
        <xsl:apply-templates/>
    </document>
</xsl:template>
 <xsl:template match="line">
     <xsl:variable name="inputDep" select="field[@id='3']"/>
<Department>
    <xsl:for-each select="document('lookup.xml')">
        <xsl:for-each select="key('Deparment',$inputDep)">
            <xsl:value-of select="."/>
        </xsl:for-each>
    </xsl:for-each>
</Department>

 </xsl:template>

</xsl:stylesheet>

查询表:

<document>
    <line-item>
        <Collection>1</Collection>
        <Department>3</Department>
    </line-item>
    <line-item>
        <Collection>2</Collection>
        <Department>1</Department>
    </line-item>
    <line-item>
        <Collection>3</Collection>
        <Department>2</Department>
    </line-item>
</document>

xml文件:

<document>
    <line id="0">
        <field id="3"><![CDATA[1]]></field>
    </line>
    <line id="1">
        <field id="3"/>
    </line>
    <line id="2">
        <field id="3"/><![CDATA[4]]></field>
    </line>
</document>

结果:

<Department>3<Department>
<Department>8<Department>
<Department>8<Department>

1 个答案:

答案 0 :(得分:1)

您可以将查找的值分配给变量,并根据是否找到任何内容选择要输出的内容。

编辑2:完整的演示样式表:

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

  <xsl:key name="Department" match="Department" use="../Collection"/>

  <xsl:template match="/">
    <document>
      <xsl:apply-templates/>
    </document>
  </xsl:template>

  <xsl:template match="line">
    <xsl:variable name="inputDep" select="field[@id='3']"/>
    <Department>
      <xsl:for-each select="document('lookup.xml')">
        <xsl:variable name="value" select="key('Department',$inputDep)"/>
        <xsl:choose>
          <xsl:when test="$value">
            <xsl:value-of select="$value"/> <!-- see note -->
          </xsl:when>
          <xsl:otherwise>8</xsl:otherwise>
        </xsl:choose>
      </xsl:for-each>
    </Department>
  </xsl:template>

</xsl:stylesheet>

注意:使用简单的xsl:for-each替换原始样式表中的xsl:value-of循环,假设循环值不是故意的。如果它实际上是,你可以用for-each循环替换它。