使用XSL转换HTML并修改表单属性

时间:2008-11-11 19:01:32

标签: html xslt xhtml transformation

我想解析HTML文档并替换所有表单的action属性,并用XSL添加一些隐藏字段。有人可以展示一些可以做到这一点的XSL示例吗?

3 个答案:

答案 0 :(得分:3)

您首先需要的是格式良好的HTML(至少是过渡性的),尽管最好推荐XHTML。某些XSLT处理器可以接受格式错误的HTML,但这不是规则。

要尝试以下示例,您可以下载this small Microsoft command line app

快速而又脏的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>

答案 1 :(得分:0)

您可以从this tutorial

开始

但请注意,通常XSLT需要格式正确XML作为输入,而HTML并不总是格式正确

答案 2 :(得分:0)

考虑gurin的答案:一种可能的基于XSLT的HTML路径是使用整洁将其转换为XHTML,将XSLT应用于XHTML,但使用xsl:output[@method="html"]来取回HTML。 @doctype-system@doctype-public属性允许您在输出文件中提供doctype声明。

我没有shahbhat的任何示例文件,但从XSLT的角度来看,一般的方法很简单:从身份转换开始,添加动作属性的模板,以您想要的方式覆盖它们。为了添加隐藏字段,我怀疑最简单的方法是为form元素显式创建一个模板作为标识转换,但其中还有其他元素也可以输出。我认为FernandoMiguélez刚刚发布了一个例子。