redtail1541
redtail1541

Reputation: 33

XSLT removing unnecessary element

i am trying to write an xslt code that will check whether the description element exist or not if it exist then it will show the description element but if it does not exist then it should not show the description element.but my code below still show element although there is no value in it.how can we code it so that it wont show out the description element if there is no description for a services.

  <?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>

as there is the an empty equipment element being returned.i want it to return only the first 2 equipment element that is not empty.

Upvotes: 3

Views: 193

Answers (3)

Shil
Shil

Reputation: 221

     <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>

or

 <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>

Upvotes: 0

Madurika Welivita
Madurika Welivita

Reputation: 900

Updated solution is follows; please check

  <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>

Upvotes: 1

hielsnoppe
hielsnoppe

Reputation: 2869

Does this work for you?

<?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>

Upvotes: 0

Related Questions