使用XSLT检索15-16个标题集合中第5到第10个标题的值

时间:2012-11-24 11:31:56

标签: xslt

下面是我的XML文件,我想使用某种形式的计数函数和XSLT来检索XML文件的标题3到4。请帮助...感谢您的帮助

<?xml version="1.0">
<catalog>
<cd>
    <title>Empire Burlesque</title>
</cd>
<cd>
    <title>Hide your heart</title>
</cd>
<cd>
    <title>Greatest Hits</title>
</cd>
<cd>
    <title>Still got the blues</title>
</cd>
</catalog>

3 个答案:

答案 0 :(得分:0)

试试这个:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<result>
 <cd><xsl:value-of select="catalog/cd[3]/title"/></cd>
 <cd><xsl:value-of select="catalog/cd[4]/title"/></cd>
</result>
</xsl:template>
</xsl:stylesheet>

答案 1 :(得分:0)

您正在寻找position() XPath函数。

例如:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <result>
      <xsl:copy-of 
        select="catalog/cd[position() &gt;= 3 and position() &lt;= 4]/title"/>
    </result>
  </xsl:template>
</xsl:stylesheet>

答案 2 :(得分:0)

这种简短而完全的“推动式”转型

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="cd/node()"/>
 <xsl:template match="cd[position() >= 3 and 4 >= position()]/title">
     <xsl:copy><xsl:apply-templates/></xsl:copy>
 </xsl:template>
</xsl:stylesheet>

应用于提供的XML文档时:

<catalog>
    <cd>
        <title>Empire Burlesque</title>
    </cd>
    <cd>
        <title>Hide your heart</title>
    </cd>
    <cd>
        <title>Greatest Hits</title>
    </cd>
    <cd>
        <title>Still got the blues</title>
    </cd>
</catalog>

会产生想要的正确结果:

<title>Greatest Hits</title>
<title>Still got the blues</title>

<强>解释

  1. 空身模板<xsl:template match="cd/node()"/>会阻止cd任何孩子的处理(“删除”)。

  2. 第二个模板会覆盖title cd的{​​{1}}个孩子的第一个模板,position()不小于3且不大于4.它有效地复制了匹配的title元素。

  3. <xsl:strip-space elements="*"/>指令通过从XML文档中删除所有仅限空格的文本节点来实现所有这些功能。通过这种方式,cd指令形成的节点列表中<xsl:apply-templates>个元素的位置(在元素的内置XSLT模板中)将是1,2,3,4而不是2, 4,6,8。