我试图匹配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
匹配处于活动状态?
答案 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>
很好。