<case>

Multi-branch conditional processor

Core v2.2.0

Overview

The processor evaluates multiple conditions in sequence and executes the first matching branch. It's equivalent to if-else-if chains but with cleaner syntax for multiple conditions. Provides structured conditional logic.

Usage Examples

Example 1: Route by HTTP status

example-1.xml
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://org.webharvest/schema/2.1/core">
<case>
  <if condition="${httpStatus == '200'}">
    <def var="result" value="success"/>
  </if>
  <if condition="${httpStatus == '404'}">
    <def var="result" value="not_found"/>
  </if>
  <if condition="${httpStatus >= '500'}">
    <def var="result" value="server_error"/>
  </if>
  <else>
    <def var="result" value="unknown"/>
  </else>
</case>
</config>

Example 2: User role-based processing

example-2.xml
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://org.webharvest/schema/2.1/core">
<case>
  <if condition="${userRole == 'admin'}">
    <def var="permissions" value="full_access"/>
    <def var="dashboard" value="admin_dashboard"/>
  </if>
  <if condition="${userRole == 'moderator'}">
    <def var="permissions" value="moderate_content"/>
    <def var="dashboard" value="moderator_dashboard"/>
  </if>
  <if condition="${userRole == 'user'}">
    <def var="permissions" value="basic_access"/>
    <def var="dashboard" value="user_dashboard"/>
  </if>
  <else>
    <def var="permissions" value="guest_access"/>
    <def var="dashboard" value="login_page"/>
  </else>
</case>
</config>

Example 3: File type processing

example-3.xml
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://org.webharvest/schema/2.1/core">
<def var="fileExtension">
  <xpath expression="substring-after(//file/@name, '.')">
    <get var="fileInfo"/>
  </xpath>
</def>

<case>
  <if condition="${fileExtension == 'xml'}">
    <def var="processor" value="xml_parser"/>
    <def var="outputFormat" value="structured_data"/>
  </if>
  <if condition="${fileExtension == 'json'}">
    <def var="processor" value="json_parser"/>
    <def var="outputFormat" value="structured_data"/>
  </if>
  <if condition="${fileExtension == 'csv'}">
    <def var="processor" value="csv_parser"/>
    <def var="outputFormat" value="tabular_data"/>
  </if>
  <else>
    <def var="processor" value="text_parser"/>
    <def var="outputFormat" value="plain_text"/>
  </else>
</case>
</config>

Example 4: Error handling with case

example-4.xml
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://org.webharvest/schema/2.1/core">
<def var="errorCode">
  <try>
    <http url="https://api.example.com/data"/>
  </try>
  <catch>
    <def var="errorType">${exception.class.simpleName}</def>
  </catch>
</def>

<case>
  <if condition="${errorType == 'ConnectException'}">
    <def var="action" value="retry_later"/>
    <def var="message" value="Network connection failed"/>
  </if>
  <if condition="${errorType == 'SocketTimeoutException'}">
    <def var="action" value="increase_timeout"/>
    <def var="message" value="Request timed out"/>
  </if>
  <if condition="${errorType == 'IOException'}">
    <def var="action" value="check_permissions"/>
    <def var="message" value="IO error occurred"/>
  </if>
  <else>
    <def var="action" value="log_and_continue"/>
    <def var="message" value="Unknown error: ${errorType}"/>
  </else>
</case>
</config>

Parameters

Important Notes

Related Processors