要将一个xml格式转换为其他xml格式我正在使用xsl.I在我的xsl文件中写了几个模板。 我正面临着翻译顺序的一些问题。
我的xsl模板:
<xsl:template match="rhs" name="rhsTemplate">
<xsl:if test="brl:retract | retract!= ''">
<xsl:for-each select="brl:retract | retract">
<xsl:element name="freeForm">
<xsl:element name="text">
<xsl:apply-templates select="." />
</xsl:element>
</xsl:element>
</xsl:for-each>
</xsl:if>
<xsl:if test="brl:tryCatchBlock | tryCatchBlock!= ''">
<xsl:if test="brl:tryCatchBlock/brl:try | tryCatchBlock/try!= ''">
<xsl:element name="freeForm">
<xsl:element name="text">
<xsl:text>try{</xsl:text>
</xsl:element>
</xsl:element>
</xsl:template>
当我发送以下xml文件作为输入时,我得到的输出是不可取的。
<rhs>
<tryCatchBlock identifier="8" order="0">
<try>
</try>
</tryCatchBlock>
<retract identifier="1" order="1">
<variableName>$Event1</variableName>
</retract>
输出:
<freeForm>
<text>retract($Event1);</text>
</freeForm>
<freeForm>
<text>try{</text>
</freeForm>
期望的输出:
<freeForm>
<text>try{</text>
</freeForm>
<freeForm>
<text>retract($Event1);</text>
</freeForm>
我的要求与xsl模板内的条件无关,根据输入的xml文件顺序,翻译需要发生。在我的xsl模板中,如果条件是在trycatch之前收回条件,那么条件就是条件。转换为“收缩”首先发生,然后它翻译trycatch标签虽然我的输入xml包含trycatch标签,但是在缩回标签之前。
请提供一些指示,根据输入的xml内容顺序进行翻译。 但是所需的输出如下(根据输入的xml顺序)。
答案 0 :(得分:0)
您的输出是按顺序排列的,因为这是模板输出的方式;它专门输出任何'收回'块,然后输出任何try / catch块。
我建议稍作重新设计:
<xsl:template match="rhs" name="rhsTemplate">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="retract">
<xsl:element name="freeForm">
<xsl:element name="text">
<xsl:apply-templates/>
</xsl:element>
</xsl:element>
</xsl:template>
<xsl:template match="tryCatchBlock">
<xsl:element name="freeForm">
<xsl:element name="text">
<xsl:text>try{</xsl:text>
</xsl:element>
</xsl:element>
</xsl:template>
第一个模板可能是多余的;默认情况下,XSLT默认执行此操作,但鉴于它已命名,我认为可能有这样的原因。
显然,您需要扩展它以适应名称空间问题;说实话,我不清楚文本retract(
的来源,但希望这个解决方案应该给你一些指示。