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






Можно начать с этот учебник
Но имейте в виду, что обычно 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 в качестве преобразования идентичности, но с дополнительными элементами внутри него, которые также выводятся. Я думаю, что Фернандо Мигелес только что опубликовал пример.