为了将一种xml格式转换为我正在使用的另一种xml格式,我在我的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模板内部的条件无关,转换需要基于我的xsl模板中的输入xml文件order.Here进行,我有一个if条件,用于在trycatch之前进行retract如果" retract“的转换首先发生,然后再转换trycatch标记,尽管我的输入xml在retract标记之前包含了trycatch标记。
请给我一些指针,以便根据输入的xml内容顺序进行翻译。但所需的输出如下所示(根据输入xml顺序)。
发布于 2011-09-13 16:52:31
您的输出顺序是这样的,因为这是您的模板输出它的方式;它特别是输出任何“retract”块,然后输出任何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(从何而来,但希望这个解决方案能给您一些提示。
https://stackoverflow.com/questions/7398592
复制相似问题