好的,我正在尝试通过XML标签动态设置输入属性。例如:
<text name='text_name' value='text_value'>text_display</text>
我想运行foreach以使其成为<text>
中的名称,值或任何其他属性将作为HTML输入的属性插入,并使用<text>
的值作为标签/占位符。
<xsl:for-each select="text">
<label><xsl:value-of select="." /></label>
<input type='textfield' placeholder='{.}' />
</xsl:for-each>
现在我知道我可以使用:
<xsl:for-each select="@*">
但我不知道如何将其插入输入标记。
提前感谢任何建议。
答案 0 :(得分:2)
尝试使用push focused (rather than pull-focused) XSLTs以及更多apply-templates
个for-each
语句。
没有任何内容表明元素或其属性的定义必须位于同一模板中。因此,当您为<text>
元素制作模板时,您只需在所有属性上创建<input>
元素和apply-templates
。
<xsl:template match="text">
<input>
<xsl:apply-templates select="@*"/>
<label><xsl:value-of select="." /></label>
</input>
</xsl:template>
其次,你要做的就是将属性直接复制到新文档中,而不是重新创建它们,而只是copy
它们,如下所示:
<xsl:template match="text/@*">
<xsl:copy/>
</xsl:template>
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/texts">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="text">
<input>
<xsl:apply-templates select="@*"/>
<label><xsl:value-of select="." /></label>
</input>
</xsl:template>
<xsl:template match="text/@*">
<xsl:copy/>
</xsl:template>
</xsl:stylesheet>
<texts>
<text name='text_name' value='text_value'>text_display</text>
<text name='text_name2' value='text_value2'>other_display</text>
</texts>
<input name="text_name" value="text_value">
<label>text_display</label>
</input>
<input name="text_name2" value="text_value2">
<label>other_display</label>
</input>