Чтобы перевести один xml-формат в другой xml-формат, я использую xsl. Я написал несколько шаблонов в моем 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-файл в качестве входных данных, я получаю вывод, который не нуженone.
<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, у меня есть условие if для retract перед trycatch, если condition.hence сначала выполняется перевод для «retract», а затем перевод тега trycatch, хотя мой входной xml содержит тег trycatch до retracttag.
Пожалуйста, дайте мне несколько указателей, чтобы сделать перевод, основанный на порядке ввода содержимого XML.Но желаемый вывод такой, как показано ниже (в соответствии с порядком ввода XML).