Преобразование HTML с помощью XSL и изменение атрибутов формы - PullRequest
1 голос
/ 11 ноября 2008

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

Ответы [ 3 ]

3 голосов
/ 11 ноября 2008

Сначала вам нужен правильно сформированный 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>
0 голосов
/ 11 ноября 2008

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

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

0 голосов
/ 11 ноября 2008

Вы можете начать с этого урока

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...