Выберите отдельные значения из подстроки в XSLT - PullRequest
0 голосов
/ 12 апреля 2020

Я застрял с моим XSL-преобразованием. У меня есть xml код:

             <DatoveOblasti>
                    <DataDo Kod="E.01.01.16.01"/>
                    <DataDo Kod="E.01.01.16.02"/>
                    <DataDo Kod="S.05.01.02.01"/>
                    <DataDo Kod="E.01.01.17.01"/>
                    <DataDo Kod="S.05.01.02.03"/>               
            </DatoveOblasti>

И мне нужен вывод:

 <find:filingIndicator contextRef="c">E.01.01</find:filingIndicator>
 <find:filingIndicator contextRef="c">S.05.01</find:filingIndicator>

Я знаю, как создать вывод подстроки, но я не могу найти, как его создать различны. Я пробовал это, но это не работает.

<xsl:template match="DataDo">
    <find:filingIndicator contextRef="c">
        <xsl:variable name="Kod" select="substring(@Kod, 1, string-length(@Kod) - 6)" />
        <xsl:for-each select="distinct-values($Kod)"/>
    </find:filingIndicator>
</xsl:template>

1 Ответ

1 голос
/ 13 апреля 2020

Рассмотрим следующий пример:

XML

<DatoveOblasti>
    <DataDo Kod="E.01.01.16.01"/>
    <DataDo Kod="E.01.01.16.02"/>
    <DataDo Kod="S.05.01.02.01"/>
    <DataDo Kod="E.01.01.17.01"/>
    <DataDo Kod="S.05.01.02.03"/>               
</DatoveOblasti>

XSLT 2.0

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="DatoveOblasti">
    <output>
        <xsl:for-each select="distinct-values(DataDo/substring(@Kod, 1, 7))">
            <item>
                <xsl:value-of select="."/>
            </item>
        </xsl:for-each>
    </output>
</xsl:template>

</xsl:stylesheet>

Результат:

<?xml version="1.0" encoding="UTF-8"?>
<output>
   <item>E.01.01</item>
   <item>S.05.01</item>
</output>

Демо : https://xsltfiddle.liberty-development.net/pNmC4HX

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...