通过XSLT获取具有多个订阅源的xml信息

时间:2014-11-04 15:30:49

标签: xml templates xslt rss items

大家好(医生尼克!)

所以我遇到了一些困难的情况。 我正在尝试使用XSLT创建一个文件,它似乎无法工作。

首先让我告诉您我正在使用通过合并多个Feed创建的XML文件。 其结构如下:

<sites>
<support>
    <rss>
        <channel>
            <title></title>
            <link></link>
            <description></description>
            <item>
                <link></link>
                <title></title>
                <description></description>
                <guid></guid>
                <pubDate></pubDate>
            </item>
        </channel>
    </rss>
</support>
<corporate>
    <rss>
        <channel>
            <title></title>
            <link></link>
            <description></description>
            <item>
                <link></link>
                <title></title>
                <description></description>
                <guid></guid>
                <pubDate></pubDate>
            </item>
        </channel>
    </rss>
</corporate>

现在。我设法从一个站点接收所有信息(每个站点有多个项目)但我想从同一模板中获取其他站点的信息。

这就是我所做的:

<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="sites">
<xsl:text>CHNL 1002</xsl:text>
<xsl:apply-templates select="support/rss/channel/item"/>
</xsl:template>
<xsl:template match="item">
<xsl:variable name="ms_title" select="/sites/support/rss/channel/title"/>
<xsl:variable name="ms_item_link" select="link"/>
<xsl:variable name="ms_item_title" select="substring-after(title, '/&gt;')"/>
<xsl:variable name="ms_item_date" select="pubDate"/>
<xsl:variable name="ms_item_description" select="substring-after(description, '/&gt;&lt;br /&gt;')"/>
<xsl:variable name="ms_item_image" select="substring-before(substring-after(description, 'src=&quot;'), '&quot;')" /> 

我可以对这个网站使用这些变量。但我想在同一个模板中使用公司网站。但我无法从那个获得物品。 我尝试了一些东西,但最终只有第一项。但每个网站有多个项目..

我发现了代码的变体,以便从Feed中获取信息。但不是来自同一模板中的合并供稿。这甚至可能实现吗?

我尝试了以下内容:

    <xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="sites">
<xsl:text>CHNL 1002</xsl:text>
<xsl:apply-templates select="support/rss/channel/item"/>
</xsl:template>
<xsl:template match="item">
<xsl:variable name="ms_title" select="/sites/support/rss/channel/title"/>
<xsl:variable name="ms_item_link" select="link"/>
<xsl:variable name="ms_item_title" select="substring-after(title, '/&gt;')"/>
<xsl:variable name="ms_item_date" select="pubDate"/>
<xsl:variable name="ms_item_description" select="substring-after(description, '/&gt;&lt;br /&gt;')"/>
<xsl:variable name="ms_item_image" select="substring-before(substring-after(description, 'src=&quot;'), '&quot;')" />
<xsl:apply-templates select="corporate/rss/channel/item"/>
<xsl:variable name="rss_title" select="/sites/corporate/rss/channel/title"/>
<xsl:variable name="rss_item_link" select="link"/>
<xsl:variable name="rss_item_title" select="substring-after(title, '/&gt;')"/>
<xsl:variable name="rss_item_date" select="pubDate"/>
<xsl:variable name="rss_item_description" select="substring-after(description, '/&gt;&lt;br /&gt;')"/>
<xsl:variable name="rss_item_image" select="substring-before(substring-after(description, 'src=&quot;'), '&quot;')" />

但是我得到的信息与第一个网站相同。

我希望我能清楚地解释自己。我不是一个好的解释者类型的人。 我希望有人能给我一个答案!我真的很感激! 感谢您抽出时间阅读我的这个可怕的故事,我期待着尝试一些新的东西!

谢谢!

1 个答案:

答案 0 :(得分:0)

替换

<xsl:apply-templates select="support/rss/channel/item"/>

<xsl:apply-templates select="//item"/>

然后在模板内部确保使用相对路径,例如

<xsl:variable name="ms_title" select="/sites/support/rss/channel/title"/>

变为

<xsl:variable name="ms_title" select="title"/>