在开始转换的其余部分之前,我想用 替换标记 。 我需要 而不是 才能进行进一步的转换。 我试图通过模板调用转换它。但它没有用。 有没有办法在同一样式表中首先执行此操作?
这是我原来的html文档:
<html>
<head>
<title>Text</title>
</head>
<body>
<div class="header">
<h1>Text</h1>
</div>
<div class="contente">
<p class="t2" name="bookmark1">Text</p>
<p>Text</p>
<p class="t2" name="bookmark2">Text</p>
<p>Text<img src=""/></p>
</div>
</body>
<html>
这是标记转换后应该如何看待
<html>
<head>
<title>Text</title>
</head>
<body>
<div class="header">
<h1>Text</h1>
</div>
<div class="contente">
<h2>Text</h2>
<p>Text</p>
<h2>Text</h2>
<p>Text<img src=""/></p>
</div>
</body>
<html>
这是我的样式
<xsl:template name="gen-topic">
<topic outputclass="konzept" xmlns:ditaarch="http://dita.oasis-open.org/architecture/2005/">
<xsl:call-template name="replaceheadings"/>
</xsl:template>
<xsl:template name="replaceheadings">
<xsl:if test="p[@class='t2']">
<h2>
<xsl:apply-templates select="*|text()|comment()"/>
</h2>
</xsl:if>
</xsl:template>
答案 0 :(得分:0)
我不确定您是否显示确切的问题,因为在您当前的XSLT代码段中,gen-topic
模板仍未被调用。尽管如此,纯粹看你的HTML样本,你可能会因使用XSLT identity template
这意味着您只需要为要转换的p
代码添加模板。
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
试试这个XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="p[@class='t2']">
<h2>
<xsl:apply-templates />
</h2>
</xsl:template>
</xsl:stylesheet>
中查看此操作
答案 1 :(得分:0)
抱歉我的错误。 我没有使用输出法。
这有助于解决我的问题。
<xsl:output method="xml"
media-type="text/html"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="DTD/xhtml1-strict.dtd"
cdata-section-elements="script style"
indent="yes"
encoding="UTF-8"/>