XPath选择follow-sibling的子子节点,其中follow-sibling在单独的子子节点中具有特定值

时间:2014-01-30 05:19:06

标签: xml xslt xpath

例如,我的XML看起来像:

<rss>
    <channel>
        <item>
            <title>Story1</title>
            <images>
                <image>
                    <type>main</type>
                    <url>http://...</url>
                </image>
                <image>
                    <type>thumb</type>
                    <url>http://...</url>
                </image>
            </images>
        </item>
        <item>
            <title>Story2</title>
            <images>
                <image>
                    <type>main</type>
                    <url>http://...</url>
                </image>
                <image>
                    <type>thumb</type>
                    <url>http://...</url>
                </image>
            </images>
        </item>
    </channel>
 </rss>

我的XSLT目前看起来像这样:

<xsl:template match="/">
    <xsl:for-each select="channel/item">
        <xsl:if test="position()=1">
            <b><xsl:value-of select="title"/></b><br/>
            <img><xsl:attribute name="src"><xsl:value-of select="images/image[type='thumb']/url"/></xsl:attribute></img>
            <br/><br/>
            <b><xsl:value-of select="./following-sibling::item[1]/title"/></b><br/>
            <img><xsl:attribute name="src"><xsl:value-of select="./following-sibling::item[1]/images/image[type='thumb']/url"/></xsl:attribute></img>
        </xsl:if>
    </xsl:for-each>
</xsl:template>

结果是第一个故事有正确的<title>和&#34;拇指&#34;但是第二个故事的标题是正确的,但没有图像,因为选择图像节点<xsl:value-of select="./following-sibling::item[1]/images/image[type='thumb']/url"/>的XPATH似乎没有匹配任何东西。

如何选择具有<url>节点的以下兄弟<image>节点的<images>节点的<type>节点&#39;拇指&#39;?

1 个答案:

答案 0 :(得分:1)

  

结果是第一个故事有正确的和   “拇指”图像......

不,实际上结果是null,因为指令:

<xsl:for-each select="channel/item">

与任何内容都不匹配。如果您将其更改为:

<xsl:for-each select="rss/channel/item">

然后我认为一切都会落实到位。虽然那里有一些令人费解的部分:你只想输出前两项吗?