This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: one xsl file for two parsings


I tried to think by myself (!) and found a part of the
answer. Since I am not sure it is correctly written,
or if there is a better way, here is what I've done. 

Joseph Vallot a écrit :
> 
> I want to write an xsl file to process several xml files, and result
> (parsing)
> would depend on a given field value, and I don't see how to do that.
> 
> Example:
> 
> xml #1 would be
> ===
> <?xml version="1.0"?>
> <mymsg>
>   <qty>123</qty>
>   <type>new</type>
>   <code>5173</code>
> </mymsg>
> ===
> and parsed into
> ===
> <?xml version="1.0"?>
> <new>
>   <qty>123</qty>
>   <code>5173</code>
> </new>
> ===
> 
> when xml #2 would be
> ===
> <?xml version="1.0"?>
> <mymsg>
>   <qty>123</qty>
>   <type>cancel</type>
>   <code>5173</code>
> </mymsg>
> ===
> and parsed into
> ===
> <?xml version="1.0"?>
> <cancel>
>   <code>5173</code>
> </cancel>
> ===
> 
> In this example, parsing depend on <type> value.

xsl I wrote is :
===
<?xml version="1.0"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
  <xsl:template match="/mymsg">
  <xsl:choose>
    <xsl:when test="./type='new'">
      <NEW>
        <xsl:apply-templates mode="new" />
      </NEW>
    </xsl:when>
    <xsl:when test="./type='cancel'">
      <CANCEL>
        <xsl:apply-templates mode="cancel" />
      </CANCEL>
    </xsl:when>
  </xsl:choose>
  </xsl:template>

  <xsl:template match="/mymsg/*" mode="new">
    (new) <xsl:copy><xsl:value-of select="." /></xsl:copy>
  </xsl:template>

  <xsl:template match="/mymsg/*" mode="cancel">
    (cancel) <xsl:copy><xsl:value-of select="." /></xsl:copy>
  </xsl:template>

</xsl:stylesheet>
===

note : "(new)" and "(cancel)" strings are just here to
see where parser goes !

questions are :

1. is it the fastest/best/etc way to do that ?
2. how do I filter out some initial nodes (<type> has
to be dropped)

Thank you in advance
-- 
Joseph


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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]