xsl-list
[Top] [All Lists]

RE: How to check whether any of child node with particular tag name h as non-empty String value

2003-01-31 14:31:19
Assuming your xml source is

<?xml version="1.0"?>
<root>
  <ATTACHMENT>
    <ATTACHMENT_NAME></ATTACHMENT_NAME>
    <ATTACHMENT_LINK>http://yahoo.com</ATTACHMENT_LINK>
    <ATTACHMENT_NAME>link</ATTACHMENT_NAME>
    <ATTACHMENT_LINK>http://msn.com</ATTACHMENT_LINK>
  </ATTACHMENT>
  <ATTACHMENT>
    <ATTACHMENT_NAME>link2</ATTACHMENT_NAME>
    <ATTACHMENT_LINK>http://msn.com</ATTACHMENT_LINK>
  </ATTACHMENT>
</root>

You could do

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
 <xsl:output method="html"/>
 <xsl:template match="/">
  <html><body>
  <P><B>ATTACHMENT:</B></P>
    <xsl:for-each select="root/ATTACHMENT">
     <xsl:for-each
select="child::ATTACHMENT_NAME[string(normalize-space(.))]">
      <xsl:variable name="href"
select="following-sibling::ATTACHMENT_LINK[1]"/>
      <a href="{$href}"><xsl:apply-templates/></a>
      <br/>
     </xsl:for-each>
    </xsl:for-each>
   </body></html>
 </xsl:template>
</xsl:stylesheet>

Ivan

-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com 
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of 
Wang, Dongzhi (ACF)
Sent: Friday, January 31, 2003 4:06 PM
To: 'xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com'
Subject: RE: [xsl] How to check whether any of child node 
with particular tag name h as non-empty String value



Thanks for the suggesion.  But I forgot to mention I should 
only output "<B>ATTACHMENT:</B>" EXACTLY one time, like:

ATTACHMENT: link1
link2

With your suggestion, the output will be like:

ATTACHMENT: link1
ATTACHMENT: link2

Could you please give me any other suggestion?

Thanks!
Dongzhi


-----Original Message-----
From: Ivan Pedruzzi [mailto:ipedruzz(_at_)progress(_dot_)com]
Sent: Friday, January 31, 2003 3:44 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: RE: [xsl] How to check whether any of child node 
with particular tag name h as non-empty String value



Try this

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
 <xsl:output method="html"/>
 <xsl:template match="ATTACHMENT">
  <html><body><P>
     <B>ATTACHMENT:</B>
     <xsl:for-each 
select="child::ATTACHMENT_NAME[string(normalize-space(.))]">
      <xsl:variable name="href" 
select="following-sibling::ATTACHMENT_LINK[1]"/>
      <br/>
      <a href="{$href}">
       <xsl:apply-templates/>
      </a>
     </xsl:for-each>
    </P></body></html>
   </xsl:template>
</xsl:stylesheet>     


Ivan

-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf 
Of 
Wang, Dongzhi (ACF)
Sent: Friday, January 31, 2003 3:14 PM
To: 'XSL-List(_at_)lists(_dot_)mulberrytech(_dot_)com'
Subject: [xsl] How to check whether any of child node with 
particular tag name h as non-empty String value


Hi All,

I run into a problem where I'm not able to check  whether any
of child node with particular tag name has empty String value.  

Here's the XML:

    <ATTACHMENT>
            <ATTACHMENT_NAME></ATTACHMENT_NAME>
            <ATTACHMENT_LINK> http://yahoo.com </ATTACHMENT_LINK>
            <ATTACHMENT_NAME> link </ATTACHMENT_NAME>
            <ATTACHMENT_LINK> http://msn.com </ATTACHMENT_LINK>
    </ATTACHMENT>

The requirement is to do something ANY of the
<ATTACHMENT_NAME> elemement has non-empty String.  Here's the 
XSL I wrote:

    <xsl:template match="ATTACHMENT">
            <xsl:if
test="string(normalize-space(child::ATTACHMENT_NAME))">
                    <P>
                            <B>ATTACHMENT:</B>
                            <xsl:for-each select="ATTACHMENT_NAME">
                                    <xsl:variable 
name="href" select="following-sibling::ATTACHMENT_LINK" />
                                    <a href ="{$href}">
                                            <xsl:apply-templates />
                                    </a>
                                    <br/>
                            </xsl:for-each>
                    </P>
            </xsl:if>
    </xsl:template>

But from the result I got, seems like the decision is only
based on the first <ATTACHMENT_NAME> element it found, and 
totally ignore the later ones. i.e. if the first 
<ATTACHMENT_NAME> has empty String value but the second one 
has String value "link" in it, it won't fall into the if block. 

Thanks in advance for any suggestions!

Dongzhi


 XSL-List info and archive:  
http://www.mulberrytech.com/xsl/xsl-list


 XSL-List info 
and archive:  http://www.mulberrytech.com/xsl/xsl-list



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>