Преобразование HTML с помощью XSL и изменение атрибутов формы

Я хотел бы проанализировать HTML-документ и заменить атрибут действия всех форм и добавить некоторые скрытые поля с помощью XSL. Может ли кто-нибудь показать несколько примеров XSL, которые могут это сделать?

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
2
0
9 919
3

Ответы 3

Можно начать с этот учебник

Но имейте в виду, что обычно XSLT требует правильного формата XML на входе, а HTML не всегда правильно сформирован.

В первую очередь вам нужен хорошо сформированный HTML (по крайней мере, переходный), хотя лучше всего рекомендуется XHTML. Некоторые процессоры XSLT могут принимать искаженный HTML, но это не правило.

Чтобы попробовать пример ниже, вы можете скачать это небольшое приложение командной строки Microsoft.

Быстрый и грязный пример XSLT для того, что вам нужно (example-xslt.xsl):

<xsl:stylesheet version = "1.0"
                xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
        <xsl:template match = "*">
            <xsl:copy>
                <xsl:copy-of select = "@*"/>
                <xsl:apply-templates/>
            </xsl:copy>
        </xsl:template>

        <xsl:template match = "form[@action='foo']">
            <xsl:copy>
                <xsl:copy-of select = "@*"/>
                <xsl:attribute name = "action">non-foo</xsl:attribute>
                <input type = "hidden" name = "my-hidden-prop" value = "hide-foo-here"/>
                <xsl:apply-templates select = "*"/>
            </xsl:copy>
        </xsl:template>

</xsl:stylesheet>

И соответствующий пример XML (example.xml).

<?xml version  = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "example-xslt.xsl"?>
<html>
    <head></head>
    <body>
        <form action = "foo">
        </form>
        <form action = "other">
        </form>
    </body>
</html>

Размышляя об ответе Гурина: один из возможных путей для HTML на основе XSLT - это использовать tidy для преобразования его в XHTML, применить XSLT к XHTML, но использовать xsl:output[@method = "html"] для возврата HTML. Атрибуты @doctype-system и @doctype-public позволяют вам также предоставить объявление doctype в выходном файле.

У меня нет образцов файлов для shahbhat, но общий подход прост с точки зрения XSLT: начните с преобразования идентичности и добавьте шаблоны для атрибутов действия, чтобы переопределить их так, как вы хотите. Чтобы добавить скрытые поля, я подозреваю, что проще всего было бы создать шаблон явно для элемента form в качестве преобразования идентичности, но с дополнительными элементами внутри него, которые также выводятся. Я думаю, что Фернандо Мигелес только что опубликовал пример.

Другие вопросы по теме