【发布时间】:2018-12-28 23:57:41
【问题描述】:
我正在尝试使用 XSLT 模板构建 XML 输出 XML 有多个 Group GroupName="PersonalSocialMedia" 项目,其中每个项目都有多个组项目。
我的输入 XML 如下所示:
<FormData>
<Group GroupName="PersonalSocialMedia" Array="true">
<GroupItem>
<Element Name="itemID">2</Element>
<Element Name="NomineePersonalSocialMedia">
<Code>2</Code>
<Value>Instagram</Value>
</Element>
<Element Name="NomineeSocialMediaUserName">Iuname</Element>
</GroupItem>
<GroupItem>
<Element Name="itemID">1</Element>
<Element Name="NomineePersonalSocialMedia">
<Code>1</Code>
<Value>Facebook</Value>
</Element>
<Element Name="NomineeSocialMediaUserName">fname</Element>
</GroupItem>
</Group>
<Group GroupName="PersonalSocialMedia" Array="true">
<GroupItem>
<Element Name="itemID">3</Element>
<Element Name="NomineePersonalSocialMedia">
<Code>3</Code>
<Value>LinkedIn</Value>
</Element>
<Element Name="NomineeSocialMediaUserName">testname1</Element>
</GroupItem>
<GroupItem>
<Element Name="itemID">2</Element>
<Element Name="NomineePersonalSocialMedia">
<Code>4</Code>
<Value>Twitter</Value>
</Element>
<Element Name="NomineeSocialMediaUserName">testname2</Element>
</GroupItem>
<GroupItem>
<Element Name="itemID">1</Element>
<Element Name="NomineePersonalSocialMedia">
<Code>1</Code>
<Value>Facebook</Value>
</Element>
<Element Name="NomineeSocialMediaUserName">testname3</Element>
</GroupItem>
</Group>
</FormData>
我想将生成的 XML 构建成如下所示;即组合每个 Groupitem 下的元素名称“NomineePersonalSocialMedia”内的所有 Value 节点,用逗号分隔,然后再次将这些值与根节点 Groupname="PersonalSocialMedia" 下的项目组合,用管道符号分隔。但是有些多级模板没有按预期工作
<PersonalSocialMedia>
Instagram, Facebook | LinkedIn, Twitter, Facebook
</PersonalSocialMedia>
这是我为实现所需输出而应用的 XSLT
<PersonalSocialMedia>
<xsl:attribute name="Category">Nominee''s preferred personal social media network</xsl:attribute>
<xsl:call-template name="Append">
<xsl:with-param name="List" select="Group[@GroupName=''Nominees'']/GroupItem/Element[@Name=''PersonalSocialMedia'']/Value" />
</xsl:call-template>
</xsl:if>
<xsl:for-each select="Group[@GroupName=''Nominees'']/GroupItem/Group[@GroupName=''PersonalSocialMedia'']/GroupItem">
<xsl:call-template name="SocialMediaAppend">
<xsl:with-param name="List" select="Element[@Name=''NomineePersonalSocialMedia'']/Value" />
</xsl:call-template>
</xsl:for-each>
<xsl:call-template name="SocialMediaAppend">
<xsl:with-param name="List" select="Group[@GroupName=''PersonalSocialMedia'']/GroupItem" />
</xsl:call-template>
</PersonalSocialMedia>
模板:
这是被调用来构建所需结果集的模板。
<xsl:template name="SocialMediaAppend">
<xsl:param name="List" />
<xsl:for-each select="$List">
<xsl:if test="position()!=last()"> | </xsl:if>
</xsl:for-each>
</xsl:template>
现在模板返回错误的结果集。我可以使用单个组项生成预期的结果集,但是当有多个时它返回错误的结果。
【问题讨论】:
标签: xml xslt string-concatenation templating