XSL:从HTML代码中删除标记

时间:2016-01-10 23:35:49

标签: html xslt

我正在尝试使用XSLT从HTML文件中删除某些标记(脚本和标题)。

这是我的源文件:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<script type="text/javascript" src=
"popup_html.js">
</script>
<!-- Redirect browser to frame page if page is not in the content frame. -->

<script type="text/javascript">
//<![CDATA[
<!--
if(top.frames.length==0) { top.location.href="index.html?3_plus_4.htm"; }
else { parent.lazysync('3_plus_4.html'); }
//-->
//]]>
</script>
<script type="text/javascript" src="highlight.js">
</script>
<title>3+4</title>
<body></body>
</html>

这是我的XSLT文件:

<xsl:stylesheet version="2.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns="" >

<xsl:output method="html" encoding="UTF-8" omit-xml-declaration="yes" indent="yes"/>

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

<xsl:template match = "script"/>
<xsl:template match = "title"/>

</xsl:stylesheet>

这是输出文件(由http://www.freeformatter.com/xsl-transformer.html生成):

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
   <script type="text/javascript" src="popup_html.js" />
   <!-- Redirect browser to frame page if page is not in the content frame. -->
   <script type="text/javascript">//
&lt;!--
if(top.frames.length==0) { top.location.href="index.html?3_plus_4.htm"; }
else { parent.lazysync('3_plus_4.html'); }
//--&gt;
//</script>
   <script type="text/javascript" src="highlight.js" />
   <title>3+4</title>
   <body />
</html>

如您所见,输出仍然包含标题脚本标记。我需要在XSLT文件中更改哪些内容才能删除它们?

1 个答案:

答案 0 :(得分:1)

您的消除模板与任何内容都不匹配,因为源XML将其所有元素放在命名空间中。

尝试改为:

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:x="http://www.w3.org/1999/xhtml">

<xsl:output method="html" encoding="UTF-8" omit-xml-declaration="yes" indent="yes"/>

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

<xsl:template match="x:script"/>
<xsl:template match="x:title"/>

</xsl:stylesheet>