在字符串输入中提取定界数据
Extract Delimited Data in a string input
我正在尝试转换由“;”分隔的字符串
这是我可能的输入
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 似乎不起作用。
在这方面有什么帮助吗?
如果您使用的是 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>
我正在尝试转换由“;”分隔的字符串 这是我可能的输入
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 似乎不起作用。
在这方面有什么帮助吗?
如果您使用的是 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>