如何将 xslt2.0 应用于 ubuntu 上的任何 html 文件?

如何将 xslt2.0 应用于 ubuntu 上的任何 html 文件?

如何将 xslt2.0 应用于 ubuntu 上的任何 html 文件?

我正在寻找可以使这个工作的东西:

wget -qO- "https://www.amazon.com/" | ????? | saxonb-xslt -o:output.xml -xsl:transform20.xsl -s:-

它必须足够强大,才能在实际环境中与 html 兼容,例如 https://www.nzz.ch/ http://www.spiegel.de/


转换20.xsl:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

答案1

问题

如何将 xslt2.0 应用于 ubuntu 上的任何 html 文件?

简短的回答

你不能。

详细答案

HTML 不是 XML。XSLT 适用于 XML,但不适用于 HTML。无论您运行什么操作系统。

如果你能确定你给出的 HTML 文件实际上是XHTML,那么它作为 XML 也是有效的,可以使用 XSLT 进行处理。但是,大多数 HTML不是XHTML 和有效的 HTML 构造如下:

<html>
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  </head>
  <body>
    <p>This is content.<br>
       This is the second line.</p>
  </body>
</html>

... 将导致 XML 或 XSLT 引擎抱怨这是无效标记,并且将无法处理。

关键问题是 HTML 允许没有结束符的开始标记。在上面的例子中,<meta><br>标记没有结束。对于 XML 处理器来说,这些标记启动了一个永无止境的构造。HTML 处理器嵌入了这些元素的列表,但 XML 处理器没有。

解决方法

为了使上述 HTML 片段能够被 XML/XSLT 引擎处理,<meta><br>标签必须具有结束标签,如<meta></meta>,或者必须是自闭合的,如<meta/>

可能有工具可以将 HTML 转换为 XHTML。快速 Google 搜索出现一些。您可能能够先通过这些运行 HTML,然后使用 XSLT 处理它们。

相关内容