【问题标题】:Use one for-each inside another one xsl在另一个 xsl 中使用一个 for-each
【发布时间】:2018-09-08 16:24:05
【问题描述】:

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>

【问题讨论】:

    标签: xml xslt transformation


    【解决方案1】:

    您的代码中有几个错误:

    1. 在 XML 中,第二个 Heading1LvlName 被错误地命名为 Heding1LvlName
    2. 在第一个 for-each 正文中的 XSLT 中,您当前的节点已经是 Heading1Lvl,但您尝试使用 Heading1Lvl/Heading2Lvl 再次选择它,因此请删除双精度。
    3. 在第二个for-each 的正文中,您当前的节点是Heading2Lvl,但您尝试选择Heading1LvlName 而不是Heading2LvlName
    4. 与 2 中相同的当前节点错误。当前节点为 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-18
      • 2015-12-16
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      相关资源
      最近更新 更多