2017-02-03 36 views
2

我試着導入XML與MS訪問的XSLT,使其與作爲逗號分隔
我的XML列表導入:如何生成XSLT逗號分隔的列表

<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

回答

4

你的XML只有一個entry,所以中的代碼只會運行一次。和做<xsl:value-of select="title" />只會選擇entry內第一title(假設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
+1

謝謝Tim的答案!但是,在我的xsl中,我會放入該片段嗎? – jjohnson

+0

這裏是它在行動的例子... http://xsltransform.net/ejivdHK –

+0

@jjohnson:我可以跟你的新的問題,也許有幫助,但它已被回答後,它不是編輯問題很好的做法這是一個完全不同的問題,因爲這意味着最初的答案不再有意義。原來的答案可能沒有幫助你,但它可能幫助了其他人(2人高舉了我的答案)。我已經將編輯回滾到您的問題。相反,你應該提出一個新的問題,但想一想你如何提出你的問題。顯示輸入XML,您嘗試過的XSLT以及您期望的與輸入相對應的輸出。謝謝! –