@ 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(.,' ', '|'),'
','')"/>
<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.
Ваш отзыв очень важен!
Спасибо,