我想解析 HTML 文档并替换所有表单的操作属性,并使用 XSL 添加一些隐藏字段。有人可以展示一些可以做到这一点的 XSL 示例吗?
shahbhat
问问题
10153 次
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 回答