我正在做一个非常简单的xslt来将html页面转换为xml文件。
但在我看来,起点对我来说并不那么简单。我的第一个目标是将<html>
代码转换为<topic>
代码。
我做了以下xslt:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="html">
<topic>
<xsl:text> Conversion Test</xsl:text>
</topic>
</xsl:template>
然而,现在我运行这个xslt之后,结果xml纯粹与原始html页面的内容相同,似乎我写的第三个模板匹配(以匹配<html>
标签)永远不会得到击中。
源html看起来像:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>..</head>
<body>...</body>
</html>
专家可以帮我一点吗?
答案 0 :(得分:4)
XSLT 1.0:
尝试将xmlns:x="http://www.w3.org/1999/xhtml"
添加到xsl:stylesheet
并将匹配项更改为match="x:html"
。 (注意:您不必使用“x”;您可以选择任何您想要的东西。)
XSLT 2.0:
使用上述方法或将匹配项中的命名空间前缀替换为“*”(match="*:html"
)。您还可以将xpath-default-namespace="http://www.w3.org/1999/xhtml"
添加到xsl:stylesheet
。
答案 1 :(得分:0)
您可能希望尝试删除第一个模板,或者使其比使用node()
匹配每个节点更具体。
答案 2 :(得分:0)
XSLT的目的是将 XML 文档转换为其他 XML 文档。 HTML不是XML文档。虽然XHTML是XML,但它实际上是HTML重新制定的,所以我不确定你想要做什么是简单的或可能的XSLT。