提取字符串输入中的定界数据

问题描述 投票:0回答:1

我正在尝试转换以“;”分隔的字符串。这是我可能输入的内容

Possibility 1: <String>1;2;3;4;5;6;7;8;9;10;11</String>
Possibility 2: <String>1;2;3;4;5</String>
Possibility 3: <String>1;2;3;4;5;6;7;8;9</String>
Possibility 4: <String>1;2;3;4</String>
Possibility 5: <String>1;2;3;4;5;;;;;10;11</String>

关于逻辑的几点

希望将上述定界字符串映射到单个如下所示的字段。

不关心位置6的值和7,因此在任何输出中都看不到它们

朝输出的末尾是一个名称为“ combined”的元素,该元素是以“ _”分隔的字符串中接收到的值的并置

虽然连接顺序虽然略有不同,但此处提到1_2_3_4_5_8_11_9_10

如果输入字符串中不存在值,则该值将保持空白,如1__3_4_5__11__10

我想为上述每种可能性看到的输出是

Possibility 1:

<A>1</A>
<B>2</B>
<C>3</C>
<D>4</D>
<E>5</E>
<F>8</F>
<G>9</G>
<H>10</H>
<I>11</I>
<Combined>1_2_3_4_5_8_11_9_10</Combined>

Possibility 2:
<A>1</A>
<B>2</B>
<C>3</C>
<D>4</D>
<E>5</E>
<F></F>
<G></G>
<H></H>
<I></I>
<Combined>1_2_3_4_5____</Combined> 

Possibility 3:
<A>1</A>
<B>2</B>
<C>3</C>
<D>4</D>
<E>5</E>
<F>8</F>
<G>9</G>
<H></H>
<I></I>
<Combined>1_2_3_4_5_8__9_</Combined> 

Possibility 4:
<A>1</A>
<B>2</B>
<C>3</C>
<D>4</D>
<E></E>
<F></F>
<G></G>
<H></H>
<I>11</I>
<Combined>1_2_3_4_____</Combined> 

Possibility 5:
<A>1</A>
<B>2</B>
<C>3</C>
<D>4</D>
<E>5</E>
<F></F>
<G></G>
<H>10</H>
<I>11</I>
<Combined>1_2_3_4_5__11__10</Combined> 

如果我假设字符串具有11个定界集的固定长度,我将获得所需的输出,而我能够通过在函数前后使用子字符串来实现此目的但是,对于像2 3 4这样的提供程序,可能并不总是发送空的定界符,然后我的xsl似乎不起作用。

在这方面有帮助吗?

xslt xslt-1.0
1个回答
0
投票

如果您正在使用Xalan,那么这应该对您有用:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:str="http://exslt.org/strings"
extension-element-prefixes="str">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/">
    <xsl:variable name="tokens" select="str:split(String, ';')" />
    <root>
        <A>
            <xsl:value-of select="$tokens[1]"/>
        </A>
        <B>
            <xsl:value-of select="$tokens[2]"/>
        </B>
        <C>
            <xsl:value-of select="$tokens[3]"/>
        </C>
        <D>
            <xsl:value-of select="$tokens[4]"/>
        </D>
        <E>
            <xsl:value-of select="$tokens[5]"/>
        </E>
        <F>
            <xsl:value-of select="$tokens[8]"/>
        </F>
        <G>
            <xsl:value-of select="$tokens[9]"/>
        </G>
        <H>
            <xsl:value-of select="$tokens[10]"/>
        </H>
        <I>
            <xsl:value-of select="$tokens[11]"/>
        </I>
        <Combined>
            <xsl:value-of select="$tokens[1]"/>
            <xsl:text>_</xsl:text>
            <xsl:value-of select="$tokens[2]"/>
            <xsl:text>_</xsl:text>
            <xsl:value-of select="$tokens[3]"/>
            <xsl:text>_</xsl:text>
            <xsl:value-of select="$tokens[4]"/>
            <xsl:text>_</xsl:text>
            <xsl:value-of select="$tokens[5]"/>
            <xsl:text>_</xsl:text>
            <xsl:value-of select="$tokens[8]"/>
            <xsl:text>_</xsl:text>
            <xsl:value-of select="$tokens[11]"/>
            <xsl:text>_</xsl:text>
            <xsl:value-of select="$tokens[9]"/>
            <xsl:text>_</xsl:text>
            <xsl:value-of select="$tokens[10]"/>
        </Combined>
    </root>
</xsl:template>

</xsl:stylesheet>
© www.soinside.com 2019 - 2024. All rights reserved.