如何在 BPEL SOA 中使用 Assign/XSLT 在嵌套节点中拆分和分配值?
How do i split and assign values in nested nodes using Assign/XSLT in BPEL SOA?
输入-:
<input>1,2,3</input>
1,2,3
用“,”分隔的值。
所需输出-:
<ABC>
<AB>
<result>1</result>
</AB>
<AB>
<result>2</result>
</AB>
<AB>
<result>3</result>
</AB>
</ABC>
这是一个 XSLT 1.0 解决方案。它使用递归命名模板。我不确定这是否可以使用 match="text()"
模板来完成,从而避免传递参数。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template name="split">
<xsl:param name="str" />
<xsl:if test="contains($str, ',')">
<AB>
<result><xsl:value-of select="substring-before($str, ',')" /></result>
</AB>
<xsl:call-template name="split">
<xsl:with-param name="str" select="substring-after($str, ',')" />
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template match="/">
<ABC>
<xsl:call-template name="split">
<xsl:with-param name="str" select="concat(input/text(), ',')" />
</xsl:call-template>
</ABC>
</xsl:template>
</xsl:stylesheet>
XSLT 2 有一个 tokenize
函数,可以让您更简洁地执行此操作:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="/">
<ABC>
<xsl:for-each select="tokenize(input, ',')">
<AB>
<result><xsl:value-of select="." /></result>
</AB>
</xsl:for-each>
</ABC>
</xsl:template>
</xsl:stylesheet>
输入-:
<input>1,2,3</input>
1,2,3 用“,”分隔的值。
所需输出-:
<ABC>
<AB>
<result>1</result>
</AB>
<AB>
<result>2</result>
</AB>
<AB>
<result>3</result>
</AB>
</ABC>
这是一个 XSLT 1.0 解决方案。它使用递归命名模板。我不确定这是否可以使用 match="text()"
模板来完成,从而避免传递参数。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template name="split">
<xsl:param name="str" />
<xsl:if test="contains($str, ',')">
<AB>
<result><xsl:value-of select="substring-before($str, ',')" /></result>
</AB>
<xsl:call-template name="split">
<xsl:with-param name="str" select="substring-after($str, ',')" />
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template match="/">
<ABC>
<xsl:call-template name="split">
<xsl:with-param name="str" select="concat(input/text(), ',')" />
</xsl:call-template>
</ABC>
</xsl:template>
</xsl:stylesheet>
XSLT 2 有一个 tokenize
函数,可以让您更简洁地执行此操作:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="/">
<ABC>
<xsl:for-each select="tokenize(input, ',')">
<AB>
<result><xsl:value-of select="." /></result>
</AB>
</xsl:for-each>
</ABC>
</xsl:template>
</xsl:stylesheet>