2

下面是我的 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>
4

3 回答 3

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()"/>可防止处理(“删除”) a 的任何子级cd

  2. 第二个模板仅针对不小于 3 且不大于 4 的 a 的子元素覆盖第一个模板。它有效地复制匹配的title元素。cdposition()title

  3. <xsl:strip-space elements="*"/>指令通过从 XML 文档中删除所有仅包含空格的文本节点来使这一切成为可能。这样,cd由指令形成的节点列表中的元素位置(在元素<xsl:apply-templates>的内置 XSLT 模板中)将是 1、2、3、4 而不是 2、4、6、8。

于 2012-11-24T16:00:12.613 回答
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>
于 2012-11-24T12:12:26.593 回答
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>
于 2012-11-24T11:44:34.907 回答