首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用xsl根据xml文件顺序进行解析

使用xsl根据xml文件顺序进行解析
EN

Stack Overflow用户
提问于 2011-09-13 16:00:18
回答 1查看 152关注 0票数 0

为了将一种xml格式转换为我正在使用的另一种xml格式,我在我的xsl文件中编写了几个模板。我在翻译顺序上遇到了一些问题,如下所示。

我的xsl模板:

代码语言:javascript
复制
 <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文件作为输入时,我得到的输出并不是所需的输出。

代码语言:javascript
复制
                               <rhs>  
                                <tryCatchBlock identifier="8" order="0">
                                <try>
                                </try>
                                </tryCatchBlock>
                <retract identifier="1" order="1">
                    <variableName>$Event1</variableName>
                </retract>

输出:

代码语言:javascript
复制
<freeForm>
<text>retract($Event1);</text>
</freeForm>
<freeForm>
<text>try{</text>
</freeForm>

所需输出:

代码语言:javascript
复制
<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顺序)。

EN

回答 1

Stack Overflow用户

发布于 2011-09-13 16:52:31

您的输出顺序是这样的,因为这是您的模板输出它的方式;它特别是输出任何“retract”块,然后输出任何try/catch块。

我建议稍微重新设计一下:

代码语言:javascript
复制
<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(从何而来,但希望这个解决方案能给您一些提示。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7398592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档