我想知道如何只将一部分XML数据返回到下一个h2标记。所以我有一个名为SUMMARY的xml节点,如下所示,带有一些示例文本:
<SUMMARY>
<h2>heading One</h2><p>paragraph text under heading one</p>
<h2>Heading Two</h2><p>paragraph text under heading two</p>
<h2>Heading Three</h2><p>paragraph text under heading three</p>
</SUMMARY>
我目前正在使用它,但它不能正常工作
<xsl:choose>
<xsl:when test="contains(SUMMARY, ':')">
<xsl:value-of select="substring-before(SUMMARY, '.')"/>.
</xsl:when>
</xsl:choose>
任何帮助将不胜感激
答案 0 :(得分:2)
在XSLT 1.0中,为了检索属于特定里程碑的内容(在本例中为标题元素),我建议使用以下两种方法之一。将这些示例中的<xsl:copy-of>
部分替换为您要对检索到的内容执行的任何操作。
<xsl:key name="content-by-heading" match="SUMMARY/p"
use="generate-id(preceding-sibling::*[self::h1|self::h2|self::h3|self::h4|self::h5|self::h6][1])"/>
<xsl:template match="h2">
<xsl:copy-of select="key('content-by-heading', generate-id())"/>
</xsl:template>
<xsl:template match="h2">
<xsl:apply-templates select="following-sibling::*[1]" mode="get-heading-content"/>
</xsl:template>
<xsl:template match="*" mode="get-heading-content">
<xsl:copy-of select="."/>
<xsl:apply-templates select="following-sibling::*[1]" mode="get-heading-content"/>
</xsl:template>
<!-- Stop iteration when we're at the next heading -->
<xsl:template match="h1|h2|h3|h4|h5|h6" mode="get-heading-content"/>
答案 1 :(得分:0)
下面总共有6个带有文字的标题。我只想回到第二个。 ...
<h2>Heading Two:</h2><p>paragraph text under heading two</p>
是预期的结果。
要返回第二个标题和第二个标题的副本,您可以执行以下操作:
<xsl:template match="SUMMARY">
<xsl:copy-of select="h2[2] | p[2]"/>
</xsl:template>
重要强>:
我注意到您已从给定示例中删除了CDATA标记。我觉得这很混乱。
如果没有CDATA部分,那么这是一个非常微不足道的问题(从上面的解决方案可以看出)。事实上,这是你的问题,我根本不打算回答它。
OTOH,如果CDATA标记毕竟存在,并且您已选择将其删除以简化&#34;简化&#34;你的问题,然后上面的解决方案不会工作,任务变得太多更难。