2

我正在将一些简单的 XML 文档转换为 XForms,并尝试为最终结果添加一些样式。我正在使用XSLTForms实现,并且指向本地 CSS 文件(Twitter 的引导程序)。所以 XML 文件看起来像这样:

<structure>
    <part class="Container" id="container">           
        <part class="Button" id="b1"/>
    </part> 
</structure>
<style>
    <property part-name="b1" name="label">Submit</property>
</style>

我的 XSLT 将这些部分转换为 XForms 文档:

<xsl:key name="buttonLabels" match="property[@name='label']" use="@part-name"/>
<xsl:template match="part[@class='Button']"><!-- [key('buttonActions', @id)]-->
    <xsl:element name="xf:trigger">
        <xsl:attribute name="id">
            <xsl:value-of select="@id | @size | @style"/>
        </xsl:attribute>
        <xsl:element name="xf:label">
            <xsl:value-of select="key('buttonLabels', @id)"/>
        </xsl:element>
    </xsl:element>
</xsl:template>

<xsl:template match="part[@class='Container']">
    <xsl:element name="div">
        <xsl:attribute name="class">container</xsl:attribute>
        <xsl:apply-templates/>
    </xsl:element>
</xsl:template>

现在,这会产生:(这对我目前需要的很好)

<div class="container">
    <xf:trigger id="b1">
       <xf:label>Submit</xf:label>
    </xf:trigger>
</div>

但我想为此添加一些样式规则 <xf:trigger>。问题是当它被转换成 html 元素时,结构是

|_span
  |_span
     |_button
       |_span (for the label)

所以我不确定如何进行 XSLT 转换,以便将假设class="btn-danger"属性插入到<button>标记中。

换句话说,我需要在最终的 Html 中得到类似的东西:(目前我得到了它,但标签class="btn-danger"中没有)button

<span id="b1">
    <span>
        <button type="button" class="btn-danger">
            <span id="xsltforms-mainform-label-2_6_2_4_3_" class="xforms-label">Submit</span>
        </button>
    </span>
</span>

此外,我尝试<xsl:attribute name="class">btn-danger</xsl:attribute>在模板中为. 添加一个xf:trigger,但这会在第一个 span 元素处插入属性。有任何想法吗?提前致谢!

更新:

xforms:trigger可以在此链接上找到负责将元素转换为 html 元素的 XSLT - http://bpaste.net/show/c42CtcIcjbsI6GFGWK2q/ 但我不想编辑XSLTForms实现,而是找到一种解决方法,以便我可以从我的 XML 文件中指定按钮的样式。例如:

<structure>
    <part class="Container" id="container">           
        <part class="Button" id="b1"/>
    </part> 
</structure>
<style>
    <property part-name="b1" name="label">Submit</property>
    <property part-name="b1" name="style">btn-danger</property>
</style>

所以在这里,我匹配零件名称并说我希望按钮具有例如id="b1"css 样式规则。btn-danger但是,如果我有另一个按钮并且它没有样式规则,它应该具有默认外观。希望这很清楚。

4

1 回答 1

3

您不能将class属性直接添加到 XSLTForms 生成的按钮元素。

但你可以用这种方式定义一个适用于它的 CSS 规则来代替它:

#myclass button {
  color: red;
}

并在触发器中使用类:

<xf:trigger class="myclass >

每个 XForms 控件都一样。只需查看浏览器检查器即可查看生成的控件。

于 2014-07-30T17:22:21.990 回答