XHTML到XML XSLT的转换
我正在使用非常简单的xslt将html页面转换为xml文件 但在我看来,起点并不是那么简单。我的第一个目标是将XHTML到XML XSLT的转换,html,xml,xslt,xhtml,Html,Xml,Xslt,Xhtml,我正在使用非常简单的xslt将html页面转换为xml文件 但在我看来,起点并不是那么简单。我的第一个目标是将标记转换为标记 我执行了以下xslt: <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:templat
标记转换为
标记
我执行了以下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如下所示:
<!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>
..
...
专家们能帮我一点忙吗?您可能希望尝试删除第一个模板,或者使其比将每个节点与
node()匹配更加具体。
xmlns:x=”http://www.w3.org/1999/xhtml“
到您的xsl:stylesheet
并将您的匹配更改为match=“x:html”
。(注意:您不必使用“x”;您可以选择任何您想要的。)
XSLT2.0:
使用上述方法或将匹配中的命名空间前缀替换为“*”(
match=“*:html”
)。您还可以添加xpath默认名称空间=”http://www.w3.org/1999/xhtml“
到xsl:stylesheet
XSLT的目的是将XML文档转换为其他XML文档。HTML不是XML文档。虽然XHTML是XML,但它实际上是重新格式化的HTML,所以我不确定您想用XSLT做什么是容易的还是可能的。您能举一个HTML的例子吗?(尤其是任何名称空间,如xmlns=”http://www.w3.org/1999/xhtml“
)@DevNull,我用源HTMLTanks更新了我的问题。好问题+1你是说删除身份转换吗?@lkuty,我确实尝试过删除第一个模板。现在,生成的xml只是一个大的文本节点,没有任何标记。它包含了原始html页面的所有文本。我错了。我认为可以选择第一条规则而不是第三条规则,但事实上,元素匹配模式的默认优先级大于node()
,因此这不可能是问题所在。我只是没想到NS。谢谢,它成功了!是的,html实际上是xhtml,我正在使用XSLT1.0,在放入您建议的名称空间后,效果很好:)我也更新了标题以反映源文档的性质。@Kevin-非常欢迎您。另外,如果您不想在XML输出中使用名称空间,请将排除结果前缀=“#all”
添加到xsl:stylesheet
。(注意:您可以用x
替换#all
,以排除x
。因此现在您可以更新标题:)。这反映了我的问题。