需要将未关闭的元元素HTML转换为XML
我已经将HTML更改为XML,在HTML输入中有一个未关闭的元元素需要将未关闭的元元素HTML转换为XML,xml,xslt,xslt-2.0,saxon,Xml,Xslt,Xslt 2.0,Saxon,我已经将HTML更改为XML,在HTML输入中有一个未关闭的元元素 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Sample</title> </head> </html> 样品 Not closed
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Sample</title>
</head>
</html>
样品
Not closed meta元素在输入中未显示任何验证错误,但在进行转换时,我得到以下错误:
The element type "meta" must be terminated by the matching end-tag "</meta>"
元素类型“meta”必须由匹配的结束标记“”终止
XSL我尝试过:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
xmlns:saxon="http://saxon.sf.net/"
version="2.0">
<xsl:template match="html">
<document>
<xsl:apply-templates/>
</document>
</xsl:template>
<xsl:template match="head">
<head>
<xsl:apply-templates/>
</head>
</xsl:template>
<xsl:template match="title">
<title>
<xsl:apply-templates/>
</title>
</xsl:template>
<xsl:param name="unparse" select="'file:///C:test.htm'"/>
<xsl:template match="saxon:meta">
<xsl:value-of select="saxon:parse-html($unparse)"/>
</xsl:template>
</xsl:stylesheet>
我在XSLT中尝试了
saxon:parse html
,但无法转换。因此,我需要使用XSLT删除非闭合元元素。我使用的是saxon PE 9.9.1.5。使用命名模板(例如XSLT)启动代码
<xsl:template name="main">
<xsl:copy-of select="saxon:parse-html(unparsed-text($unparse))"/>
</xsl:template>
请注意,9.9支持XSLT 3,因此您可以使用name=“xsl:initial template”
而不是name=“main”
,并且不用将初始模板的名称拼写为选项——默认为该模板。为什么不使用:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
Xslt处理器抛出一个错误,因为每个元素都必须有一个打开和关闭标记
--
在XHTML中,XML规则适用,因此每个元素毫无例外都必须同时具有开始标记和结束标记,但如果元素内容为空(例如,缩写),则相同的标记可用于两个角色
不确定希望与哪个元素匹配match=“saxon:meta”
。我认为它与任何内容都不匹配,因此从未调用parse-html()。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>