xsl-list
[Top] [All Lists]

Re: [xsl] Newbie Question: Creating Error Description from Invalid Input

2006-10-13 08:43:20
On Friday 13 October 2006 15:20, Badari wrote:
I am a newbie to XSL and am hoping that somebody can help me with the
following scenario. I tried to use xsl:variable but was not successful. :(

I have an "errorDescription" element in the target structure. Depending on
the error condition result on input fields, I have to concatenate the field
names (that are in error) and post them to the errorDescription field.

How can I do it?  Any help is appreciated.

sample input.

<request>
 <header>
  <address1>1234</address1>
  <address2></address2>
  <address3>3456</address3>
  <address4></address4>
 </header>
</request>

If all address elements are expected to have values, and 2nd and 4th don't
have values the output file should look like:

<response>
 <header>
  <address1>1234</address1>
  <address3>3456</address3>
  <errorDescription>Invalid Elements: Address2,Address4</errorDescription
 </header>
</response>


<xsl:template match="header">
  <header>
    <xsl:apply-templates mode="valid" />
  </header>
  <errorDescription>
    <xsl:apply-templates mode="invalid" />
  </errorDescription>
</xsl:template>

<xsl:template match="*" mode="valid">
  <xsl:if test="string(.)!=''">
    <xsl:element name="name()">
      <xsl:apply-templates />
    </xsl:element>
  </xsl:if>
</xsl:template>

<xsl:template match="*" mode="invalid">
  <xsl:if test="string(.)=''">
    <xsl:value-of select="name()" />
    <xsl:if test="position()!=last()">; </xsl:if>
  </xsl:if>
</xsl:template>

I haven't tested it.

If there is a XPath expression to match elements by whether they have any text 
content or not which would be better:

<xsl:template match="header">
  <header>
    <xsl:apply-templates select="all address* children with content" />
  </header>
  <xsl:if test="count(all address* children without content) &gt; 0">
    <errorDescription>
      <xsl:value-of select="all address* children without content" />
    </errorDescription>
  </xsl:if>
</xsl:template>

Any ideas if such an XPath exists?

Cheers,
Richard
-- 
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Richard Lewis
Sonic Arts Research Archive
http://www.sara.uea.ac.uk/
JID: ironchicken(_at_)jabber(_dot_)earth(_dot_)li
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--