在使用 XSL 将 XHTML 转换为 XHTML 时,我遇到了名称空间的问题。考虑作为示例输入:
<!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>Test</title></head>
<body>
<p>Remove this</p>
</body>
</html>
然后以下转换不起作用(例如,不删除<p />
):
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()" name="copy">
<xsl:copy><xsl:apply-templates select="@*|node()" /></xsl:copy>
</xsl:template>
<xsl:template match="p" />
</xsl:stylesheet>
但是这个可以:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<xsl:template match="@*|node()" name="copy">
<xsl:copy><xsl:apply-templates select="@*|node()" /></xsl:copy>
</xsl:template>
<xsl:template match="xhtml:p" />
</xsl:stylesheet>
我的问题和疑问是:如何更改 XSLT,以便不必为所有 XHTML 元素添加前缀并且它仍然可以匹配它们?从我到目前为止的尝试来看,添加一个像这样的默认命名空间<xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml" />
并不能实现这一点。
谢谢你的帮助!