在 XSLT 转换期间在输出文档中的特定点插入元素

2024-03-03

我想知道您是否可以在处理过程中访问结果文档。

我问的原因是我正在转换输入文档,并希望根据某些条件插入元素,但这必须在我遍历树并且我即将创建它时发生。

转换后的 xml 看起来与此类似:

<xform>
    <xforms>
        <model>
            <instance>
                <data />
                <data />
            </instance>
        </model>
        <bind />
        <bind />
        <bind />
    </xforms>
</xform>

我打算在转换期间(在序列化上述 xml 之前)访问<instance>标记并插入附加内容<data>元素。

Note输入文档与上面的 xml 不同 - 上面的 xml 是转换应该生成的内容。

同样,我想访问<xform>元素并插入附加元素<bind> nodes.

所以最终的文档看起来像这样(假设我添加了 2 个数据节点和 2 个绑定节点):

<xform>
    <xforms>
        <model>
            <instance>
                <data />
                <data />
                <data>new data node</data>
                <data>second new data node</data>
            </instance>
        </model>
        <bind />
        <bind />
        <bind />
        <bind>new bind node</bind>
        <bind>second new bind node</bind>
    </xforms>
</xform>

任何帮助表示赞赏。


不,您无法访问结果文档,但是您可以在变量中创建临时树,然后根据需要使用不同模式的模板再次处理它们。所以而不是例如

<xsl:template match="/">
  <xsl:result-document href="example.xml">
<xform>
 <xforms>
  <model>
   <instance>
    <data>
    </data>
   </instance>
  </model>
  <bind />
  <bind />
  <bind />
 </xforms>
</xform>
  </xsl:result-document>
</xsl:template>

您可以在变量中创建第一个结果,然后进一步处理它,例如

<xsl:template match="@* | node()">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="/">
  <xsl:variable name="temp1">
<xform>
 <xforms>
  <model>
   <instance>
    <data>
    </data>
   </instance>
  </model>
  <bind />
  <bind />
  <bind />
 </xforms>
</xform>
</xsl:variable>
  <xsl:result-document href="example.xml">
    <xsl:apply-templates select="$temp1/*"/>
  </xsl:result-document>
</xsl:template>

<xsl:template match="instance">
  <xsl:copy>
    <xsl:apply-templates/>
    <data>...</data>
  </xsl:copy>
</xsl:template>

该示例不使用模式,但我经常将它们与变量和不同的处理步骤一起使用,以将每个步骤的模板与其他步骤完全分开。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 XSLT 转换期间在输出文档中的特定点插入元素 的相关文章

随机推荐