修改XSLT样式表以获取转换后消失的一些标记

时间:2011-10-03 21:22:15

标签: php xml xslt

我使用XSLT转换了一些RSS XML提要。基本上我编辑了两种类型:

1. <rss><channel>some tags about the RSS<item></item></channel></rss>
2. <feed>some tags about the RSS<entry></entry></feed>

使用此样式表。 (它从paths.xml文件中获取一些文件)

<xsl:stylesheet version="1.0" xmlns:f="http://www.w3.org/2005/Atom" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/*">
    <NEWrss>
        <xsl:for-each select="file">
            <xsl:apply-templates 
                select="document(.)/*//channel | document(.)/f:feed/f:entry">
                <xsl:with-param name="file" select="."/>
            </xsl:apply-templates>
        </xsl:for-each>
    </NEWrss>
</xsl:template>

在第一个RSS上,我使用<channel>和第一个<item>之间的标记正确输出了输出。这些是包含博客信息的标签,如标题。

然而,在第二个版本中,那些标签(博客的标题...在<feed>和第一个<entry>之间找到)在转换后消失了。标签显示正确。

我的问题是如何才能获得这些标签?

第二个结构的样本Feed是http://feeds.feedburner.com/EFENPRESS-

谢谢。

2 个答案:

答案 0 :(得分:0)

看起来像命名空间问题。您正在使用命名空间前缀“f”来访问feed和entry元素,但这些元素实际上并不在该命名空间中。 (实际上,entry元素是空的,因此访问它不会呈现任何内容)

答案 1 :(得分:0)

我认为你所说的是你没有看到f:feed元素之前的文字。那是因为你的select语句不包括它 - 它只选择f:feed / f:entry和channel元素。也许你应该尝试处理f:feed而不是f:feed / f:entry?或f:feed / node(),它将同时选择f:feed / text()和f:feed()/ f:entry。