XSLT For-each 以分号分隔的值而不是单独的标记显示
XSLT For-each to display in a semicolon-delimited value instead of separate tags
有没有一种方法可以在单个标记但以分号分隔的值中列出 XSLT 中的所有“for-each”值,而不是具有多个值的多个标记?例如:
XSLT
<xsl:for-each select="/StringAssetInfoMulti[attrTagName='LeadActor']/values/s">
<xsl:element name="{'LeadActor'}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>
XML转
<StringAssetInfoMulti attrId.l="2870">
<attrTagName t="ws">LeadActor</attrTagName>
<attrName t="ws">LeadActor</attrName>
<values t="lws">
<s>Rufa Mae Quinto</s>
<s>Edgar Allan Guzman</s>
<s>Angelina Kanapi</s>
<s>Barbie Capacio</s>
<s>Jude Matthew Servilla</s>
</values>
</StringAssetInfoMulti>
因此,不要将 LeadActors 标签转换为以下结果:
<LeadActor>Rufa Mae Quinto</LeadActor>
<LeadActor>Edgar Allan Guzman</LeadActor>
<LeadActor>Angelina Kanapi</LeadActor>
<LeadActor>Barbie Capacio</LeadActor>
<LeadActor>Jude Matthew Servilla</LeadActor>
我需要一个可以将所有结果合并到一个具有分号分隔值的标记中的转换:
<LeadActor>Rufa Mae Quinto;Edgar Allan Guzman;Angelina Kanapi;Barbie Capacio;Jude Matthew Servilla</LeadActor>
这可能吗?我将在 XSLT 中放入什么?谢谢!
在 XSLT 2 及更高版本中,您可以使用
<LeadActor>
<xsl:value-of select="/StringAssetInfoMulti[attrTagName='LeadActor']/values/s" separator=";"/>
</LeadActor>
在 XSLT 1 中,很明显您需要使用 for-each 或 apply-templates 处理,然后将 ;
作为分隔符输出,除最后一个外,所有输出都使用 <xsl:text>;</xsl:text>
或除第一项以外的所有项,例如
<xsl:for-each select="/StringAssetInfoMulti[attrTagName='LeadActor']/values/s">
<xsl:if test="position() > 1">
<xsl:text>;</xsl:text>
</xsl:if>
<xsl:value-of select="."/>
</xsl:for-each>
有没有一种方法可以在单个标记但以分号分隔的值中列出 XSLT 中的所有“for-each”值,而不是具有多个值的多个标记?例如:
XSLT
<xsl:for-each select="/StringAssetInfoMulti[attrTagName='LeadActor']/values/s">
<xsl:element name="{'LeadActor'}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>
XML转
<StringAssetInfoMulti attrId.l="2870">
<attrTagName t="ws">LeadActor</attrTagName>
<attrName t="ws">LeadActor</attrName>
<values t="lws">
<s>Rufa Mae Quinto</s>
<s>Edgar Allan Guzman</s>
<s>Angelina Kanapi</s>
<s>Barbie Capacio</s>
<s>Jude Matthew Servilla</s>
</values>
</StringAssetInfoMulti>
因此,不要将 LeadActors 标签转换为以下结果:
<LeadActor>Rufa Mae Quinto</LeadActor>
<LeadActor>Edgar Allan Guzman</LeadActor>
<LeadActor>Angelina Kanapi</LeadActor>
<LeadActor>Barbie Capacio</LeadActor>
<LeadActor>Jude Matthew Servilla</LeadActor>
我需要一个可以将所有结果合并到一个具有分号分隔值的标记中的转换:
<LeadActor>Rufa Mae Quinto;Edgar Allan Guzman;Angelina Kanapi;Barbie Capacio;Jude Matthew Servilla</LeadActor>
这可能吗?我将在 XSLT 中放入什么?谢谢!
在 XSLT 2 及更高版本中,您可以使用
<LeadActor>
<xsl:value-of select="/StringAssetInfoMulti[attrTagName='LeadActor']/values/s" separator=";"/>
</LeadActor>
在 XSLT 1 中,很明显您需要使用 for-each 或 apply-templates 处理,然后将 ;
作为分隔符输出,除最后一个外,所有输出都使用 <xsl:text>;</xsl:text>
或除第一项以外的所有项,例如
<xsl:for-each select="/StringAssetInfoMulti[attrTagName='LeadActor']/values/s">
<xsl:if test="position() > 1">
<xsl:text>;</xsl:text>
</xsl:if>
<xsl:value-of select="."/>
</xsl:for-each>