我認爲你遇到的問題是命名空間。您在XSLT中沒有適當地考慮它們。看一個樣品進料,根元素如下:
<feed xmlns:im="http://itunes.apple.com/rss" xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
這意味着,除非另有說明,所有的元素都是與URI的命名空間的一部分「http://www.w3.org/2005/原子」。儘管您已在XSLT中聲明瞭這一點,但您並未真正使用它,而您的XSLT代碼正在嘗試匹配不屬於任何名稱空間的元素。
還有一個問題,就是您的XSLT並不會考慮飼料元素。你需要做的就是用下面的
<xsl:template match="/atom:feed">
您XSL替換<xsl:template match="/">
初始模板匹配:然後,每個將變得像這樣
<xsl:for-each select="atom:entry">
以下是完整的XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:im="http://itunes.apple.com/rss">
<xsl:output method="html" indent="yes"/>
<xsl:template match="/atom:feed">
<tr>
<th>ID</th>
<th>Title</th>
</tr>
<xsl:for-each select="atom:entry">
<tr>
<td>
<xsl:value-of select="atom:id"/>
</td>
<td>
<xsl:value-of select="atom:title"/>
</td>
<td>
<xsl:value-of select="atom:category/@label"/>
</td>
</tr>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
這應該有希望輸出一些結果。
請注意,通常最好使用模板匹配,而不是使用xsl:for-each以鼓勵重新使用模板,使用更少的縮進來整理代碼。這也會起作用
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:im="http://itunes.apple.com/rss">
<xsl:output method="html" indent="yes"/>
<xsl:template match="/atom:feed">
<tr>
<th>ID</th>
<th>Title</th>
</tr>
<xsl:apply-templates select="atom:entry"/>
</xsl:template>
<xsl:template match="atom:entry">
<tr>
<td>
<xsl:value-of select="atom:id"/>
</td>
<td>
<xsl:value-of select="atom:title"/>
</td>
<td>
<xsl:value-of select="atom:category/@label"/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
非常感謝Tim。我非常感謝這個詳細的答案。我會在我的博客上發佈解決方案,以便其他人可以受益。祝你有美好的一天.. –