2

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

4

3 回答 3

4

您首先需要的是格式良好的 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>
于 2008-11-11T19:40:58.653 回答
0

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

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

于 2008-11-11T19:42:57.527 回答
0

您可以从本教程开始

但请注意,通常XSLT需要格式良好的XML输入,HTML并不总是格式良好

于 2008-11-11T19:06:55.803 回答