XSLT删除不必要的元素

时间:2012-10-24 10:29:53

标签: xslt

我正在尝试编写一个xslt代码,它将检查描述元素是否存在,如果它存在,那么它将显示描述元素,但如果它不存在那么它不应该显示描述元素。但我的代码如下仍然显示元素,虽然它没有任何价值。我们可以编码它,以便在没有服务描述时它不会显示描述元素。

  <?xml version="1.0" encoding="UTF-8"?>
  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">


   <xsl:template match="Service">
     <xsl:element name="equipment">
      <xsl:if test="description !='' ">
          <xsl:value-of select="description" />
      </xsl:if>
      <xsl:if test="not(description)">
      </xsl:if>
     </xsl:element>
    </xsl:template>
   </xsl:stylesheet>

因为返回了一个空的设备元素。我希望它只返回非空的前2个设备元素。

3 个答案:

答案 0 :(得分:1)

更新后的解决方案如下;请检查

    

  <xsl:template match="Services">
    <xsl:for-each select="Service">
      <xsl:if test="count(description) &gt; 0 and description!=''">
        <equipment>
          <xsl:value-of select="description"/>
        </equipment>
      </xsl:if>
    </xsl:for-each>

  </xsl:template>


</xsl:stylesheet>

答案 1 :(得分:0)

这对你有用吗?

<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<!-- place <result /> as root to produce wellformed XML -->
<xsl:template match="/">
  <result><xsl:apply-templates /></result>
</xsl:template>

<!-- rewrite those <Service /> that have a <description /> -->
<xsl:template match="Service[./description]">
  <equipment><xsl:value-of select="description" /></equipment>
</xsl:template>

<!-- remove those who do not -->
<xsl:template match="Service[not(./description)]" />
</xsl:transform>

答案 2 :(得分:0)

     <xsl:template match="/">
  <xsl:apply-templates select="//Service"/>
  </xsl:template>
<xsl:template match="Service">
      <xsl:if test="description !='' ">
           <xsl:element name="equipment">
          <xsl:value-of select="description" />
     </xsl:element>
      </xsl:if>
    </xsl:template>

 <xsl:template match="/">
  <xsl:apply-templates select="//Service"/>
  </xsl:template>
   <xsl:template match="Service">
      <xsl:if test="child::description[text()]">
       <xsl:element name="equipment">
          <xsl:value-of select="description" />
            </xsl:element>
      </xsl:if>
    </xsl:template>