下面是我的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>
答案 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() >= 3 and position() <= 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>
<强>解释强>:
空身模板<xsl:template match="cd/node()"/>
会阻止cd
任何孩子的处理(“删除”)。
第二个模板会覆盖title
cd
的{{1}}个孩子的第一个模板,position()
不小于3且不大于4.它有效地复制了匹配的title
元素。
<xsl:strip-space elements="*"/>
指令通过从XML文档中删除所有仅限空格的文本节点来实现所有这些功能。通过这种方式,cd
指令形成的节点列表中<xsl:apply-templates>
个元素的位置(在元素的内置XSLT模板中)将是1,2,3,4而不是2, 4,6,8。