我有一个像这样的XML文档:
<bibliography>
<element1>
<text>
Some text and <italic>italic Text</italic> and <bold>bold text</bold>
</text>
</element1>
<element2>
<text>
Some text and <italic>italic Text</italic> and <bold>bold text</bold>
</text>
</element2>
</bibliography>
此XSL有效但不格式化<italic>
或<bold>
标记。
<xsl:template match="/">
<html>
<head>
<title>Bibliographie</title>
<style type="text/css">
.entry {
font-family: Georgia
}
</style>
</head>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="/bibliography/*">
<p>
<div class="entry{@type}">
[<xsl:number count="*"/>]
<xsl:apply-templates/>
</div>
</p>
</xsl:template>
我需要添加什么才能让它格式化HTML的<italic>
和<bold>
标记?
我尝试使用XSL-FO,但似乎我无法将对象导出为HTML,只是导出为PDF。
答案 0 :(得分:4)
您已经提出了有关输出xsl-fo的类似问题。 HTML的主体是相同的,但只输出HTML标签而不是xsl-fo的标签。
XSLT无法正常工作的主要问题是因为您还没有匹配粗体或斜体
的模板试试这个XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes"/>
<xsl:template match="bibliography">
<html>
<head>
<title>Bibliographie</title>
<style type="text/css">
.entry {
font-family: Georgia
}
</style>
</head>
<body>
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="bibliography/*">
<div class="entry{@type}">
[<xsl:number count="*"/>]
<xsl:apply-templates/>
</div>
</xsl:template>
<xsl:template match="bibliography/*/*" priority="0">
<p>
<xsl:apply-templates/>
</p>
</xsl:template>
<xsl:template match="text">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="bold">
<span style="font-weight:bold;">
<xsl:apply-templates/>
</span>
</xsl:template>
<xsl:template match="italic">
<span style="font-style:italic;">
<xsl:apply-templates />
</span>
</xsl:template>
</xsl:stylesheet>
不使用&#34;优先级&#34;在其中一个模板上
<xsl:template match="bibliography/*/*" priority="0">
这可以作为一种全面的&#34;全能的&#34;用于匹配您没有特定模板的元素的模板。需要优先考虑以确保它不会在模板匹配之前得到应用&#34;斜体&#34;和&#34;大胆&#34;例如。如果您想要以特定方式格式化其他元素,例如&#34; author&#34;,只需为它们添加特定模板。