我对XSLT比较陌生,并且发现前兄弟姐妹::很痛苦。选择父母的前兄弟姐妹的ID
用一个非常简单的示例XML:
<month>
<day id="1">Day one was a lovely day</day>
<day id="2">Day two was balls</day>
<day id="3">Day three was Wednesday</day>
</month>
和一些基本的XSLT(我想每天输出到一个新的文件:这个没问题):
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="/month">
<xsl:for-each select="day">
<xsl:result-document href="output/day-{@id}/index.html">
<xsl:call-template name="page" />
</xsl:result-document>
</xsl:for-each>
</xsl:template>
<xsl:template name="page">
<html>
<head>
<title>This is <xsl:value-of select="id" /></title>
</head>
<body>
<h1>Day of new <xsl:value-of select="@id" /></h1>
<p><xsl:value-of select="." /></p>
<!--PROBLEM HERE:: -->
Previous: <xsl:value-of select="" />
</body>
</html>
</xsl:template>
</xsl:stylesheet>
问题我有最后一点(我在这里写过问题)。我正在尝试获取前一天的ID。我似乎无法获得正确的select
值。我试过ancestor::
和../preceding-sibling::day[1]
的所有组合,我可以在任何地方找到。请帮忙!
我还没有检查过这个代码中是否有前一个节点,但是至少假设它在第2天和第3天都有效。 – user2672537 2015-01-26 18:33:03
您不需要在本月进行匹配,因为您正在处理的所有内容都是儿童,XSLT内置的模板规则会自动执行此操作。取消每天的for-each和模板匹配,而不是。此外,如果我是你,我会将被调用的模板放到日期模板中,以便清楚地知道该代码的执行位置,并且不必知道它从何处被调用。现在可能很容易,但如果你有更大的样式表则不会。 –
2015-01-26 20:35:46