如何将 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 处理它们。