С такими данными часто лучше решать это в несколько этапов. Первый этап: превратить его в структурированный XML, тот тип XML, который вы бы предпочли получить в первую очередь; второй этап, захватите фактические данные, которые вам нужны.
Причина этого в том, что первый этап часто можно использовать повторно; Вы можете применить к данным одну и ту же предварительную обработку независимо от того, что вы хотите с ней делать потом.
Я понятия не имею, что представляет собой фактическая модель данных или что вы можете найти в других примерах вашего ввода, но если вы хотите включить
<StartDate>(Offers:1)=04/24/2019;(Offers:2)=04/26/2019;(Offers:3)=04/28/2019</StartDate>
в
<StartDate>
<Offers nr="1">2019-04-24</Offers>
<Offers nr="2">2019-04-26</Offers>
<Offers nr="3">2019-04-28</Offers>
</StartDate>
Тогда вы можете сделать это с
<xsl:template match="StartDate|...">
<xsl:copy>
<xsl:for-each select="tokenize(., ';')">
<Offers nr="{position()}>
<xsl:value-of select="my:us-date-to-iso(substring-after(., '='))"/>
</Offers>
</xsl:for-each>
</xsl:copy>
</xsl:template>
где my: us-date-to-iso конвертирует американские (мм / дд / гггг) даты в формат ISO обычным способом.
Тогда вторая фаза становится тривиальной.