我尝试使用ms访问的XSLT导入XML,以便以逗号分隔的方式导入列表 我的XML:
<entry>
<title>Adobe</title>
<description>Adobe Acrobat</description>
<title>Adobe1</title>
<description>Adobe Acrobat1</description>
<title>Adobe2</title>
<description>Adobe Acrobat2</description>
</entry>
我的尝试:
<xsl:for-each select="entry">
<xsl:if test="position() > 1">, </xsl:if>
<xsl:value-of select="title"/>
</xsl:for-each>
预期结果:Adobe,Adobe1,Adobe2
答案 0 :(得分:4)
您的XML只有一个entry
,因此xsl:for-each
中的代码只会运行一次。执行<xsl:value-of select="title" />
只会选择title
中的第一个entry
(假设是XSLT 1.0)
将其更改为此...
<xsl:for-each select="entry/title">
<xsl:if test="position() > 1">, </xsl:if>
<xsl:value-of select="."/>
</xsl:for-each>
请注意,在XSTL 2.0中,您可以使用此...
完全替换上面的代码段 <xsl:value-of select="entry/title" separator="," />
编辑:假设您的XSLT看起来像这样......
<iavmNotice xmlns="http://stuff.com" noticeId="138643">
<title>Cisco Vulnerability</title>
<techOverview>
<entry>
<title>2012-2490</title>
<description>Cisco ID 71.</description>
</entry>
<entry>
<title>2012-2525</title>
<description>Cisco ID 69.</description>
</entry>
</techOverview>
</iavmNotice>
然后,要在上下文中使用xsl:for-each
,您可以添加如下模板:
<xsl:template match="stuff:techOverview">
<xsl:copy>
<xsl:for-each select="stuff:entry/stuff:title">
<xsl:if test="position() > 1">, </xsl:if>
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:copy>
</xsl:template>
请注意以下事项:
stuff
前缀根据输入XML stuff:techOverview