Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt 提取字符串输入中的分隔数据_Xslt_Xslt 1.0 - Fatal编程技术网

Xslt 提取字符串输入中的分隔数据

Xslt 提取字符串输入中的分隔数据,xslt,xslt-1.0,Xslt,Xslt 1.0,我正在尝试转换由“;”分隔的字符串 这里是我可能的输入 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&l

我正在尝试转换由“;”分隔的字符串 这里是我可能的输入

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>
可能性1:1;2.3.4.5.6.7.8.9;10;11
可能性2:1;2.3.4.5.
可能性3:1;2.3.4.5.6.7.8.9
可能性4:1;2.3.4.
可能性5:1;2.3.4.5.10;11
关于逻辑的几个问题

希望将上述分隔字符串映射到单个 如下所示的字段

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

朝向 输出的末尾是一个名为“combined”的元素,它是一个 串接以“\”分隔的字符串接收的值

不过,这里提到的连接顺序略有不同 1_2_3 4、5、8、11、9、10

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

我希望看到的上述每个可能性的输出是

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> 
可能性1:
1.
2.
3.
4.
5.
8.
9
10
11
1_2_3_4_5_8_11_9_10
可能性2:
1.
2.
3.
4.
5.
1_2_3_4_5____ 
可能性3:
1.
2.
3.
4.
5.
8.
9
1_2_3_4_5_8__9_ 
可能性4:
1.
2.
3.
4.
11
1_2_3_4_____ 
可能性5:
1.
2.
3.
4.
5.
10
11
1_2_3_4_5__11__10 
如果我假设字符串的长度是固定的,有11个分隔集,那么我就能够得到所需的输出,这是通过在函数前后使用子字符串实现的 然而,对于2 3 4这样的可能性,提供者并不总是发送空的分隔符,然后我的xsl似乎就不起作用了


在这方面有什么帮助吗?

如果您正在使用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>

_
_
_
_
_
_
_
_

“故意混淆”不是此处需要应用的逻辑的良好描述。-另外,您使用的是哪种XSLT1.0处理器?如果处理器支持EXSLT
str:tokenize()
str:split()
扩展函数,这可能会容易得多。到目前为止,您编写了哪些代码?@michael.hor257k:感谢您的反馈。我现在对这个问题做了一个更正,解释了逻辑。我们正在使用ApacheXalanprocessor@PierreFrançois:下面是我们实现的逻辑示例。使用这些语句,我们可以成功地从分隔字符串中提取值,并将它们映射到单个值,还可以形成组合字符串,如上图所示。但问题似乎在于假设我总是有一个固定的分隔字符串谢谢你,这很有效!!我不知道有一个直接的函数可以使用。现在已经检查了文档,感谢您的快速帮助@michael.hor257k