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>
任何人都可以告诉我为什么模板匹配模式没有执行?
非常感谢任何想法/解决方案/见解。
答案 0 :(得分:0)
由于没有DATA元素,因此必须从默认的内置模板调用match =“element”模板,该模板不会使用mode =“test”执行apply-templates。
答案 1 :(得分: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>
你应该看到你的预期结果。