xsl-list
[Top] [All Lists]

RE: Output based on the existence of a particular piece of data in a list

2003-04-07 10:29:59
-----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 
Martin, Tripp
Sent: Monday, April 07, 2003 10:39 AM
To: 'XSL-List(_at_)lists(_dot_)mulberrytech(_dot_)com'
Subject: [xsl] Output based on the existence of a particular piece of
data in a list


I've got the following incoming XML:

<AC:validateAcctngCodeResponse xmlns:AC="AcctngActivityWS">
  <UserId>U712345</UserId>
  <AcctngCodeOut>
      <Type>CC</Type>
      <Identifier>1234</Identifier>
      <Status>OK</Status>
      <StatusText>Document has no errors.</StatusText>
  </AcctngCodeOut>
  <AcctngCodeOut>
      <Type>P</Type>
      <Identifier>54321</Identifier>
      <Status>OK</Status>
      <StatusText>Document has no errors.</StatusText>
  </AcctngCodeOut>
  <AcctngCodeOut>
      <Type>O</Type>
      <Identifier>78960</Identifier>
      <Status>Error</Status>
      <StatusText>Order 78960 does not exist</StatusText>
  </AcctngCodeOut>
</AC:validateAcctngCodeResponse>

I need to make my output based on the existence of a <Status> tag with
"Error".  So, in the case above I want to have:
<accountcheckreply>
      <success>false</success>
      <message type="error">
         <code>1</code>
         <description>Order 78960 does not exist</description>
      </message>
</accountcheckreply>

Whereas if there were no errors in the incoming document, I would have
simply:
<accountcheckreply>
      <success>true</success>
</accountcheckreply>

I haven't been able to figure out what I need to use to make 
this happen.
Can anyone offer a suggestion of where to start?

Thanks,
Tripp

I would start by using a test within the match="/" template
such as
  <xsl:choose>
    <xsl:when test="AC:validateAcctngCodeResponse/AcctngCodeOut/Status = 
'Error'">
which will be true if any of the Status nodes in your structure have
the value 'Error'.  In that case, apply a template matching the first
AcctngCodeOut node whose Status child has the value 'Error':
      <xsl:apply-templates select="(AC:validateAcctngCodeResponse/AcctngCodeOut
             [Status = 'Error'])[1]" />
and in that template, create your output <accountcheckreply> element giving
the failure details.

Otherwise, create a successful <accountcheckreply> element.

Lars


lars_huttar(_at_)sil(_dot_)org                  "He is not here!  He is risen!"


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



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