如何首先替换标签转换

时间:2016-02-11 08:52:14

标签: xml xslt

在开始转换的其余部分之前,我想用 替换标记 。 我需要 而不是 才能进行进一步的转换。 我试图通过模板调用转换它。但它没有用。 有没有办法在同一样式表中首先执行此操作?

这是我原来的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>

2 个答案:

答案 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>

http://xsltransform.net/94rmq6L

中查看此操作

答案 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"/>