替换每个span元素

时间:2014-08-21 08:27:36

标签: php xslt

我试图匹配DOM文档中的多个span元素。

以下是我目前使用的XSLT:

<xsl:stylesheet version="1.0"  xmlns:php="http://php.net/xsl" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" encoding="utf-8"/>

  <xsl:template match="html">
      <xsl:apply-templates select="./*"/>
  </xsl:template>

  <xsl:template match="/html/body">
      <body>
          <xsl:apply-templates/>
      </body>
  </xsl:template>

  <xsl:template match="/html/head">
      <head>
          <xsl:copy-of select='.'/>
          <link type="text/css" href="additional-style.css" rel="stylesheet"/>
      </head>
  </xsl:template>

  <xsl:template match="//script|//style|//link|//meta">
      <xsl:copy-of select='.'/>
  </xsl:template>

  <xsl:template match="/html/body/*">
      <xsl:copy-of select='.'/>
  </xsl:template>

  <xsl:template match="//span">
      HELLO I'M A SPAN
  </xsl:template>

</xsl:stylesheet>

目前,无论我将<xsl:template match="//span">放在XSLT文档中,跨度都不会改变。如果我删除<xsl:template match="/html/body/*">部分,它确实有效。如何保持以前的行为并使span匹配处于活动状态?

1 个答案:

答案 0 :(得分:1)

你必须使用

  <xsl:template match="/html/body/*">
      <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
      </xsl:copy>
  </xsl:template>

确保使用匹配模板处理子节点。但通常只需使用

即可实现
  <xsl:template match="@* | node()">
      <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
      </xsl:copy>
  </xsl:template>

另请注意,在匹配模式中,前导//不是必需的,例如<xsl:template match="script">...</xsl:template>很好。