XHTML: Переместить CSS в каждый тег из заголовка <style>в атрибут @style, например, «premailer» с XSLT, возможно? - PullRequest
0 голосов
/ 24 июля 2011

В Интернете есть несколько программ, например, Ruby или Python, которые перемещают CSS-стили XHTML в теги. Их часто называют premailer, потому что некоторые старые почтовые программы имеют проблемы с определенными заголовками таблицами стилей. Вот пример того, что делает premailer на python: premailer на pypi

Я хочу переместить таблицы стилей CSS *1006* в формате json из заголовка HTML <style> внутри каждого связанного узла, который имеет атрибут class.

Пример ввода:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Sometest</title>

<style type="text/css">
/*<![CDATA[*/
ol{margin:0;padding:0}p{margin:0}.c1{vertical-align:top;width:93.6pt;border-style:solid}.c2{vertical-align:top;width:41.8pt;border-style:solid}hr.c1{page-break-before:always}
/*]]>*/
</style>

</head>
<body>
<div>
<p class="c1"><span>Style C2 Text</span></p>
<hr class="c1"/>
<p class="c2">Style C1 Text</p>
</div>
</body>
</html>

Мой желаемый вывод. Посмотрите на style в <hr> и <p>:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Sometest</title>

<style type="text/css">
/*<![CDATA[*/
ol{margin:0;padding:0}p{margin:0}.c1{vertical-align:top;width:93.6pt;border-style:solid}.c2{vertical-align:top;width:41.8pt;border-style:solid}hr.c1{page-break-before:always}
/*]]>*/
</style>

</head>
<body>
<div>
<p class="c1" style="vertical-align:top;width:93.6pt;border-style:solid"><span>Style C2 Text</span></p>
<hr class="c1" style="page-break-before:always"/>
<p class="c2" style="vertical-align:top;width:41.8pt;border-style:solid">Style C1 Text</p>
</div>
</body>
</html>

Кто-нибудь делал это с XSLT раньше?
Это также возможно с XSLT 1.0?

1 Ответ

0 голосов
/ 24 июля 2011

Вместо того, чтобы делать это в XSLT, который является неуклюжим и не более переносимым, чем Python, я предлагаю вам адаптировать любой премалер, который вы предпочитаете, использовать прямой парсер XML вместо парсера супа тега.

В зависимости от того, как работают почтовые программы, может даже оказаться возможным использовать их анализатор супа тега для первого прохода, а затем просто использовать анализатор DOM или SAX для фазы аннотации.

...