@ zx485 - спасибо за ваш отзыв. Это работает, но могу ли я знать, как я буду выполнять итерацию, если у меня есть несколько данных в записи данных? Я отредактировал свой пост на вход и ожидаемый результат. Заранее спасибо.

ужно получить значение каждого из данных после последнего двоеточия. Например, у меня есть этот файл:

<Data>
:20:PmtReferenceID000012
:21:Not used
:25: PHMNLBICXXX/Account00010203
:28c:00001/0001 (The 'c' in :28 can be either in upper or lower case)

:20:PmtReferenceID000012
:21:Not used
:25: PHMNLBICXXX/Account00010203
:28c:00001/0001 (The 'c' in :28 can be either in upper or lower case)
</Data>

Мне нужно сохранить значение после ': 20:' до<ABCD>, ': 21:' к<EFGH>, ': 25:' к<IJKL> и ': 28c:' для<MNOP>.

Вот мой XSLT:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>
<xsl:template match="Data">
    <Data>
        <xsl:variable name="OneLine" select="replace(translate(.,'&#10;', '|'),'&#xD;','')"/>
        <ABCD>
            <xsl:value-of select="substring-before(substring-after($OneLine, ':20:'),'|:')"/>
        </ABCD>
        <EFGH>
            <xsl:value-of select="substring-before(substring-after($OneLine, ':21:'),'|:')"/>
        </EFGH>
        <IJKL>
            <xsl:value-of select="substring-before(substring-after($OneLine, ':25:'),'|:')"/>
        </IJKL>
        <MNOP>
            <xsl:value-of select="substring-before(substring-after($OneLine, ':28c:'),'|:')"/>
        </MNOP>
    </Data>
</xsl:template>

Ожидаемый результат:

<Data>
   <ABCD>PmtReferenceID000012</ABCD>
   <EFGH>Not used</EFGH>
   <IJKL> PHMNLBICXXX/Account00010203</IJKL>
   <MNOP>00001/0001</MNOP>
</Data>
<Data>
   <ABCD>PmtReferenceID000012</ABCD>
   <EFGH>Not used</EFGH>
   <IJKL> PHMNLBICXXX/Account00010203</IJKL>
   <MNOP>00001/0001</MNOP>
</Data>

Я сначала заменил возврат каретки на трубу ('|'), так что, если я получу значение, например, ': 20:', я буду искать '|' и подстрока значения после «: 20:» и перед «|». Есть ли простой способ получить значение после каждого последнего двоеточия, потому что ключей так много, если я собираюсь использовать метод, который я использовал? Я думаю об использовании индекса или позиции и сохраняю все ключи (: 20:,: 21:,: 25:,: 28c '), так что если следующая запись содержит «: 21:» или «: 25 : 'или': 28c ', он получит значение до этого ключа. Но я понятия не имею, как мне это сделать с помощью xslt.

Ваш отзыв очень важен!

Спасибо,

Ответы на вопрос(0)

Ваш ответ на вопрос