Как я могу применить xslt2.0 к любому html-файлу в ubuntu?
Как я могу применить xslt2.0 к любому html-файлу в ubuntu?
Я ищу то, что сделает эту работу:
wget -qO- "https://www.amazon.com/" | ????? | saxonb-xslt -o:output.xml -xsl:transform20.xsl -s:-
Он должен быть достаточно надежным для работы с HTML в дикой природе, например, https://www.nzz.ch/ http://www.spiegel.de/
transform20.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 к любому html-файлу в ubuntu?
Краткий ответ
Ты не можешь.
Длинный ответ
HTML не XML. XSLT применим к XML, но не к HTML. Неважно, на какой ОС вы работаете.
Если вы можете удостовериться, что данный HTML-файл на самом деле является X HTML, тогда он также действителен как 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.