需要将未关闭的元元素HTML转换为XML

需要将未关闭的元元素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更改为XML,在HTML输入中有一个未关闭的元元素

<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"/>