1

xslt 很新,我正在尝试为 PDF 生成目的编写一个 xslt 模板。

这是传入 xml 的片段:

<element name="rootElement">
    <attributes />
    <elements>
        <element name="childElement">
            <attributes>
                <attribute name="attributename" value="Yes" />
            </attributes>
        </element>
    </elements>
</element>

除了以表格形式打印所有元素名称和相应值之外,我还需要显示特定于每个子元素的文本。

在做了一些研究之后,我认为这可以通过模板匹配和设置模式属性的组合来实现。这是我写的代码:

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <xsl:template match="DOCUMENT">
        <xsl:apply-templates select="DATA" />
    </xsl:template>

    <xsl:template match="DATA">

        <xsl:apply-templates select="element" />
        <xsl:apply-templates select="element" mode="test" />

    </xsl:template>

    <xsl:template match="element">
        <fo:block font-size="18.0pt" font-family="Arial"
            font-weight="bold">
            Display something I.
        </fo:block>
    </xsl:template>

    <xsl:template match="element" mode="test">
        <fo:block font-size="18.0pt" font-family="Arial"
            font-weight="bold">
            Display something II.
        </fo:block>
    </xsl:template>
</xsl:stylesheet>

这是执行后的输出:

<?xml version="1.0" encoding="UTF-8"?>
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" font-size="18.0pt" font-family="Arial" font-weight="bold">
            Display something I.
</fo:block>

谁能告诉我为什么没有执行与模式匹配的模板?

任何想法/解决方案/见解将不胜感激。

4

2 回答 2

0

既不<xsl:template match="DOCUMENT">也不<xsl:template match="DATA">被处决。

如果您将第二个模板更改为:

<xsl:template match="/">

    <xsl:apply-templates select="element" />
    <xsl:apply-templates select="element" mode="test" />

</xsl:template>

您应该会看到预期的结果。

于 2013-07-28T10:52:40.343 回答
0

由于没有 DATA 元素,因此必须从默认的内置模板调用 match="element" 模板,该模板不会使用 mode="test" 执行应用模板。

于 2013-07-27T16:57:32.510 回答