Есть ли способ в XSLT 1.0 разделить строку на основе двух специальных символов? - PullRequest
0 голосов
/ 25 февраля 2020

Я использую xslt 1.0, он выбирает строку из представления базы данных, и строка выглядит следующим образом:

abc@gmail.com;xyz@gmail.com,pqr@gmail.com;efg@gmail.com

Эти почтовые идентификаторы разделены специальными символами (запятая и точка с запятой), а не обязательно в том же порядке. Я хочу, чтобы эти почтовые идентификаторы были напечатаны с тем же именем тега в XML с разделенными значениями, такими как:

<tagname>abc@gmail.com</tagname>
<tagname>xyz@gmail.com</tagname>
<tagname>pqr@gmail.com</tagname>
<tagname>efg@gmail.com</tagname>

Чтобы быть точным, я хочу разбить строку на основе специальных символов и заполнить их в тот же тег имени в XML Есть ли способ добиться этого?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Для полноты в XSLT 2.0 просто используйте

<xsl:for-each select="tokenize(input, '[,;]')">
  <tagname><xsl:value-of select="."/></tagname>
</xsl:for-each>
0 голосов
/ 25 февраля 2020

Попробуйте это XSLT 1.0

 <xsl:variable name="InputData" select="'abc@gmail.com;xyz@gmail.com,pqr@gmail.com;efg@gmail.com'"/>

    <xsl:template match="/">
        <xsl:call-template name="emailaddress">
            <xsl:with-param name="email" select="translate($InputData, ',', ';')"/>
        </xsl:call-template>
    </xsl:template>

    <xsl:template name="emailaddress">
        <xsl:param name="email"/>
        <xsl:choose>
            <xsl:when test="contains($email, ';')">
                <tagname><xsl:value-of select="substring-before($email, ';')"/></tagname>
                <xsl:call-template name="emailaddress">
                    <xsl:with-param name="email" select="substring-after($email, ';')"></xsl:with-param>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <tagname><xsl:value-of select="$email"/></tagname>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

См. Преобразование в https://xsltfiddle.liberty-development.net/gWEaSvs

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