1

好的,我正在尝试通过 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="@*"> 

但我不知道如何将它插入到输入标签中。

提前感谢您的任何建议。

4

1 回答 1

2

尝试使用带有更多和更少语句的推送(而不是拉)XSLT 。apply-templatesfor-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>

...当应用于此输入 XML 文档时...

<texts>
  <text name='text_name' value='text_value'>text_display</text>
  <text name='text_name2' value='text_value2'>other_display</text>
</texts>

...给出这个结果 XML

<input name="text_name" value="text_value">
    <label>text_display</label>
</input>
<input name="text_name2" value="text_value2">
    <label>other_display</label>
</input>
于 2013-11-07T02:59:41.283 回答