Altova Mailing List Archives>Archive Index >xml-dev Archive Home >Recent entries >Thread Prev - >Thread Next - RE: [xml-dev] XSTL stylesheet workarounds for exceptions [xml-dev] XSTL stylesheet workarounds for exceptionsTo: xml-dev@-----.---.--- Date: 2/2/2009 9:04:00 PM Hi All,
Â
I am at a stage of fine-tuning an existing stylesheet that has been worked on recently and would like include some workarounds to accommodate exceptional data in the following 2 areas:
Â
( i ) Get the content of sub-elements <a> as follows:
<p>
 <strong>Hobbies:</strong>
 <a shape="rect" href=http://www.hobbies.com/fishing title="Shark Hunting">fishing</a>
 <a shape="rect" href=http://www.hobbies.com/hunting title="Animal">rabbit</a>
(Out-door adventures)
</p>
 Intended output
<hobbies>fishing<hobbies>
<hobbies>rabbit<hobbies>
Â
In this case, it is both fishing, rabbit that I am after. However, I still couldn’t get it working despite having tried numerous of the following stylesheet approaches:
Â
<xsl:template match="/">
 <employee>
   <xsl:apply-templates select="//ns:p"/>
 </employee>
</xsl:template>
Â
( A ) <xsl:template match="ns:p[ns:strong='Hobbies:']">          <xsl:copy-of            Â
          <hobbies>select="ns:a"/></hobbies>
      </xsl:template>
              or
( B ) <xsl:template match="ns:p[ns:strong='Hobbies:']">
        <xsl:for-each select="ns:a/text()[normalize-space() != '']">
          <hobbies><xsl:value-of select="normalize-space()"/></hobbies>
        </xsl:for-each>
       </xsl:template>
              or
( C ) <xsl:template match="ns:p[ns:strong='Hobbies:']">
        <xsl:for-each select=".//ns:a/text()[normalize-space() != '']">
          <hobbies><xsl:value-of select="normalize-space()"/></hobbies>
        </xsl:for-each>
       </xsl:template>
             or
( D ) <xsl:template match="ns:p[ns:strong='Hobbies:']">
        <xsl:for-each select="ns:p/ns:a/text()[normalize-space() != '']">
          <hobbies><xsl:value-of select="normalize-space()"/></hobbies>
        </xsl:for-each>
      </xsl:template>
              or
( E ) <xsl:template match="ns:p[ns:strong='Hobbies:']">
        <xsl:for-each select="./ns:a//text()[normalize-space() != '']">
          <hobbies><xsl:value-of select="normalize-space()"/></hobbies>
         </xsl:for-each>
       </xsl:template>
              or
( F ) <xsl:template match="ns:p[ns:strong='Hobbies:']"> Â Â Â Â Â Â Â Â <xsl:for-each select="ns:a">
         <xsl:for-each select="text()[normalize-space() != '']">"
           <hobbies><xsl:value-of select="normalize-space()"/></hobbies>
         </xsl:for-each>
        </xsl:for-each>
    </xsl:template>
              or
( G ) <xsl:template match="ns:p[ns:strong='Hobbies:']"> Â Â Â Â Â Â Â Â Â <xsl:for-each select=".//ns:a">
           <xsl:for-each select="text()[normalize-space() != '']">"
             <hobbies><xsl:value-of select="normalize-space()"/></hobbies>
           </xsl:for-each>
         </xsl:for-each>
       </xsl:template>
Â
( ii ) I also like to add a default generic value for any missing element. Say if there are no <p><strong>Hobbies:</strong></p>
null element such as <hobbies>Unknown</hobbies>. The intended stylesheet should look
like the following but again couldn’t get it working still:
Â
<xsl:template match="/">
 <employee>
   <xsl:apply-templates select="//ns:p"/>
 </employee>
</xsl:template>
 <xsl: choose>
 <xsl: when test="ns:p[ns:strong='Hobbies:']">
   <xsl:template match="ns:p[ns:strong='Hobbies:']">
     <xsl:for-each select="text()[normalize-space() != '']">
       <hobbies><xsl:value-of select="normalize-space()"/></hobbies>
     </xsl:for-each>
   </xsl:template> </xsl:when>
<xsl:otherwise>
 <hobbies>Unknown</hobbies>
</xsl:otherwise>
</xsl: choose>
Â
I have run out of ideas and would be very much appreciated if anyone could give me some suggestion on how to tackle this task.
Jack
element in such document, yet I still would like to generate a
Stay connected to the people that matter most with a smarter inbox. Take a look http://au.docs.yahoo.com/mail/smarterinbox | ||||||
| Company | Legal | Press | Partners | Careers | Sitemap | Contact Us | Altova Blog | Mobile | Full Site | |||
|
