Je voudrais analyser le document HTML et remplacer l'attribut d'action de tous les formulaires et ajouter des champs cachés avec XSL. Quelqu'un peut-il montrer quelques exemples de XSL qui peuvent le faire?Transformation de HTML avec XSL et modification des attributs de formulaire
Répondre
Vous pouvez commencer à partir this tutorial
Mais sachez que généralement XSLT
exige bien formé XML
en entrée et HTML
est pas toujours bien formé
Ce que vous devez d'abord est bien formé HTML (au moins transitionnel), bien que recommandé XHTML. Certains processeurs XSLT peuvent accepter du HTML malformé mais ce n'est pas la règle.
Pour essayer l'exemple ci-dessous, vous pouvez télécharger this small Microsoft command line app.
exemple XSLT rapide et sale pour ce que vous avez besoin (exemple-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>
Et l'exemple XML correspondant (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>
Pensée de la réponse de Gurin: une voie à base XSLT possible pour HTML est d'utiliser bien rangé pour le convertir en XHTML, appliquer XSLT au XHTML, mais utiliser xsl:output[@method="html"]
pour obtenir HTML arrière. Les attributs @doctype-system
et @doctype-public
vous permettent également de fournir une déclaration doctype dans le fichier de sortie.
Je n'ai aucun fichier d'exemple pour shahbhat, mais l'approche générale est simple d'un point de vue XSLT: commencez avec une transformation d'identité et ajoutez des modèles pour que les attributs d'action les remplacent comme vous le souhaitez. Pour ajouter des champs cachés, je pense que le moyen le plus simple serait de créer explicitement un modèle pour l'élément form
en tant que transformation d'identité, mais avec des éléments supplémentaires à l'intérieur qui sont également générés. Je pense que Fernando Miguélez vient de publier un exemple.