如何使用XSLT

时间:2017-02-03 22:42:43

标签: xml ms-access xslt xpath

我尝试使用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

1 个答案:

答案 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
  • 的其他模板