我是XSLT的新手,并且难以使用XSLT 2.0对编码逻辑进行迭代和连接。我提供下面的场景。
输入XML:
<ADR_ENTR>
<ADR_ENTR_VW>
<ADR_LINE>
<TEXT>LINE1</TEXT>
</ADR_LINE>
<ADR_LINE>
<TEXT>LINE2</TEXT>
</ADR_LINE>
<ADR_LINE>
<TEXT>LINE3</TEXT>
</ADR_LINE>
<ADR_LINE>
<TEXT>LINE4</TEXT>
</ADR_LINE>
</ADR_ENTR_VW>
</ADR_ENTR>
聚合中可以有任意数量的ADR_LINE聚合,我需要按原样输出第一个ADR_LINE,然后需要连接ADR_LINE 2 - 4,然后需要连接ADR_LINE 4到最后一个ADR_LINE。
示例输出响应:
<ADR_ENTR>
<ADR_ENTR_VW>
<ADR_LINE>
<TEXT>LINE1</TEXT>
</ADR_LINE>
<ADR_LINE>
<TEXT>LINE2 LINE3 LINE 4</TEXT>
</ADR_LINE>
</ADR_ENTR_VW>
</ADR_ENTR>
非常感谢任何帮助。
答案 0 :(得分:0)
这可以通过一个简单的模板来完成,该模板将第一个<ADL_LINE>
插入到自己的元素中,然后将所有其他元素连接成第二个:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="ADR_ENTR/ADR_ENTR_VW">
<ADR_ENTR>
<ADR_ENTR_VW>
<ADR_LINE>
<TEXT>
<xsl:value-of select="ADR_LINE[1]"/>
</TEXT>
</ADR_LINE>
<ADR_LINE>
<TEXT>
<xsl:value-of select="string-join(ADR_LINE[position()!=1],' ')"/>
</TEXT>
</ADR_LINE>
</ADR_ENTR_VW>
</ADR_ENTR>
</xsl:template>
</xsl:stylesheet>
此行使用position = 1谓词
选择第一个<ADR_LINE>
<xsl:value-of select="ADR_LINE[1]"/>
然后,该行迭代除第一个之外的所有其他<ADR_LINE>
元素,将它们与空格分隔符连接起来:
<xsl:value-of select="string-join(ADR_LINE[position()!=1],' ')"/>
答案 1 :(得分:0)
您也可以使用它。
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ADR_ENTR_VW">
<ADR_ENTR_VW>
<ADR_LINE>
<TEXT>
<xsl:value-of select="normalize-space(ADR_LINE[1])"/>
</TEXT>
</ADR_LINE>
<ADR_LINE>
<TEXT>
<xsl:value-of select="normalize-space(string-join(ADR_LINE[position() != 1],' '))"/>
</TEXT>
</ADR_LINE>
</ADR_ENTR_VW>
</xsl:template>