Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XHTML到XML XSLT的转换_Html_Xml_Xslt_Xhtml - Fatal编程技术网

XHTML到XML XSLT的转换

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将html页面转换为xml文件

但在我看来,起点并不是那么简单。我的第一个目标是将
标记转换为
标记

我执行了以下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
。因此现在您可以更新标题:)。这反映了我的问题。