我想将当前“节”的position()传递给“正文”模板。因此,我将当前position()分配给变量“ sectionPos”。 但是,继续操作时,“节/正文”模板中的参数“ pSectionPos”始终包含数字1。
如果我取消注释模板“ section ...”中的行,则参数“ pSectionPos”正确包含1和2。
xml结构:
<?xml version="1.0" encoding="UTF-8"?>
<data>
<content>
<section type="__section_table_">
<body>
<item>
</item>
<item>
</item>
</body>
</section>
<section type="__section_table_">
<body>
<item>
</item>
<item>
</item>
</body>
</section>
</content>
</data>
xslt结构:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet [
<!ENTITY newLine " ">
<!ENTITY tab "	">
]>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
<xsl:output method='html' standalone="yes" indent="yes" />
<!--root-->
<xsl:template match="/">
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
</head>
<body>
<xsl:apply-templates select="//data/content" />
<xsl:text>&newLine;</xsl:text>
</body>
</html>
</xsl:template>
<!--content part-->
<xsl:template match="content">
<xsl:apply-templates select="section[contains(attribute::type,'__section_table_')]" />
</xsl:template>
<!--sections part-->
<xsl:template match="section[contains(attribute::type,'__section_table_')]">
<xsl:variable name="sectionPos" as="xs:integer" select="xs:integer(position())" />
<!--xsl:text>&newLine;</xsl:text>
<xsl:text>&tab;&tab;</xsl:text>
<xsl:value-of select="$sectionPos" />
<xsl:value-of select="' template-section'"/-->
<xsl:apply-templates select="body" >
<xsl:with-param name="pSectionPos" select="$sectionPos" />
</xsl:apply-templates>
</xsl:template>
<!--section body-->
<xsl:template match="section/body">
<xsl:param name="pSectionPos" />
<xsl:text>&newLine;</xsl:text>
<xsl:text>&tab;&tab;</xsl:text>
<xsl:value-of select="$pSectionPos"/>
<xsl:value-of select="' template-body'"/>
</xsl:template>
</xsl:stylesheet>
谢谢。
答案 0 :(得分:0)
您谈到了当前“部分”的 position()
这似乎暗示了一种误解,因为position()不是节点的属性,而是您当前正在处理的节点列表的属性。
在带有match="section"
的模板中,position()
的值将是您在由xsl:apply-templates
指令选择的节点列表中与之匹配的部分的位置,该节点导致该部分被选中。您尚未向我们展示此说明,这表明您尚未意识到其重要性。
有些人误以为position()
返回元素在其同级元素中的位置。如果您要这样做,最好使用xsl:number
或count(preceding-sibling::XXXX)
。