我遇到XSL转换问题。我将使用xml文件发送包含标题的文档,因此,我需要在另一个文件中使用for-each来创建任何级别的标题的章节列表,但它不起作用。谢谢你的帮助。
XML
<Chapters>
<Chapter>
<Heading1Lvl>
<Heading1LvlName>heading1nameFirst</Heading1LvlName>
<Heading2Lvl>
<Heading2LvlName>heading2name</Heading2LvlName>
<Text typeOfText="basic">BasicText</Text>
<Text typeOfText="important">Important</Text>
<Text typeOfText="link">Link</Text>
</Heading2Lvl>
</Heading1Lvl>
</Chapter>
<Chapter>
<Heading1Lvl>
<Heding1LvlName>heading1nameSecond</Heding1LvlName>
<Heading2Lvl>
<Heading2LvlName>heading2nameSecond</Heading2LvlName>
<Heading3Lvl>
<Heading3LvlName>Heading3First</Heading3LvlName>
<Text typeOfText="basic">BasicText1</Text>
<Text typeOfText="important">Important1</Text>
<Text typeOfText="link">Link1</Text>
</Heading3Lvl>
<Heading3Lvl>
<Heading3LvlName>Heading3second</Heading3LvlName>
<Text typeOfText="basic">BasicText2</Text>
<Text typeOfText="important">Important2</Text>
<Text typeOfText="link">Link2</Text>
</Heading3Lvl>
<Heading3Lvl>
<Heading3LvlName>Heading3third</Heading3LvlName>
<Text typeOfText="basic">BasicText3</Text>
<Text typeOfText="important">Important3</Text>
<Text typeOfText="link">Link3</Text>
</Heading3Lvl>
<Text typeOfText="basic">BasicText</Text>
<Text typeOfText="important">Important</Text>
<Text typeOfText="link">Link</Text>
</Heading2Lvl>
</Heading1Lvl>
</Chapter>
</Chapters>
XSL
<xsl:template match="Chapters">
<div style="padding-top:10%">
<xsl:for-each select="Chapter/Heading1Lvl">
<xsl:value-of select="Heading1LvlName"/>
<xsl:for-each select="Heading1Lvl/Heading2Lvl">
<xsl:value-of select="Heading1LvlName"/>
<xsl:for-each select="Heading2/Heading3Lvl">
<xsl:value-of select="Heading3LvlName"/>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</div>
答案 0 :(得分:0)
您的代码中存在多个错误:
Heading1LvlName
被错误地命名为Heding1LvlName
。for-each
的第一个Heading1Lvl
正文中的XSLT中,您尝试使用Heading1Lvl/Heading2Lvl
再次选择它,因此请删除双精度。for-each
的正文中,您当前的节点为Heading2Lvl
,但您尝试选择Heading1LvlName
而不是Heading2LvlName
Heading2Lvl
,您尝试使用Heading2/Heading3Lvl
再次选择它。只需使用Heading3Lvl
修好所有这些后,您的模板如下所示:
<xsl:template match="Chapters">
<div style="padding-top:10%">
<xsl:for-each select="Chapter/Heading1Lvl">
<xsl:value-of select="Heading1LvlName"/>
<xsl:for-each select="Heading2Lvl">
<xsl:value-of select="Heading2LvlName"/>
<xsl:for-each select="Heading3Lvl">
<xsl:value-of select="Heading3LvlName"/>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</div>
</xsl:template>