我想解析HTML文档并替换所有表单的action属性,并用XSL添加一些隐藏字段。有人可以展示一些可以做到这一点的XSL示例吗?
答案 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刚刚发布了一个例子。