我正在将xml文件转换为带有xforms的html,我想在xforms模型中插入一个带有属性名称的新标签(用XPath提取)。
基本上我有这个XML:
<structure>
<part class='Button' id="b0"/>
<part class="Button" id="b1"/>
<part class="TextBox" id="t1"/>
</structure>
我想为xforms模型创建空标签作为实例元素。因此,我需要通过添加一个名为part
属性的新空标记来声明具有类TextBox
的{{1}} - 所以id
。
我需要它作为XForms实例元素。
我写过以下XSLT,但我不确定我是否朝着正确的方向前进(尝试使用转义<t1/>
和>
)
<
也许,这是微不足道的,但我无法理解它......提前致谢!
更新: 最终结果应该是:
<xsl:template match="/">
<html>
<head>
<xf:model id="model{position()}">
<xf:instance id="formData{position()}">
<xsl:choose>
<xsl:when test="part[@class='TextBox']">
<xsl:for-each select="part[@class='TextBox']">
<xsl:element name="textBox">
>
<xsl:value-of select="{@id}"/>
<
</xsl:element>
</xsl:for-each>
</xsl:when>
</xsl:choose>
</xf:instance>
</xf:model>
</head>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
答案 0 :(得分:1)
要生成<t1>
元素,您可以使用<xsl:element>
:
<xsl:element name="{@id}"/>
除非您在某个祖先元素中定义了默认命名空间(例如:<data xmlns="">
),否则您可能无法生成<html xmlns="html-namespace">
。然后你可以直接把它写到结果树:
<data xmlns="">
<xsl:element name="{@id}"/>
</data>
您的模板在/
中创建了一个上下文,该上下文没有<part>
个孩子。您可以将所有内容放在与structure
匹配的模板中,也可以在包含structure
的表达式中将part
添加为父选择器:
<xsl:when test="structure/part[@class='TextBox']">
<xsl:for-each select="structure/part[@class='TextBox']"> ...
这应该可以让你产生你期望的结果。