XHTML到XML XSLT转换

时间:2011-10-27 18:19:23

标签: html xml xslt xhtml

我正在做一个非常简单的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>

专家可以帮我一点吗?

3 个答案:

答案 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。