Я пытаюсь интерпретировать структуру построителя запросов и преобразовывать его в формат xsl. Я намерен использовать XSL для создания другой структуры XSL. Для этого я использую тег xsl: namespace-alias.Облицовка проблемы при использовании XSL для генерации другого XSL
Я грубо следующую структуру XML
<rule>
<criteria>
<queryelement>
<key>employee_id</key>
<op>
<code>eq</code>
<label>Equals</label>
</op>
<value>emp1</value>
</queryelement>
<queryelement>
<code>and</code>
</queryelement>
<queryelement>
<key>salary</key>
<op>
<code>eq</code>
<label>Equals</label>
</op>
<value>10000</value>
</queryelement>
<evaluation>
<value>10</value>
<type>CONSTANT</type>
</evaluation>
</criteria>
<criteria>
<queryelement>
<key>fname</key>
<op>
<code>eq</code>
<label>Equals</label>
</op>
<value>first</value>
</queryelement>
<evaluation>
<value>20</value>
<type>CONSTANT</type>
</evaluation>
</criteria>
</rule>
Мне нужно написать XSL генерировать следующий вывод
Ожидаемый результат:
<xxx:when test="employee_id eq emp1 and salary eq 10000">
<xxx:value-of select="10"/>
</xxx:when>
<xxx:when test="fname eq first">
<xxx:value-of select="20"/>
</xxx:when>
Ближайший я смог сделать то же самое используется ниже xsl:
xsl прикладной:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xxx="my:dummyNS" exclude-result-prefixes="xxx">
<xsl:namespace-alias result-prefix="xsl" stylesheet-prefix="xxx"/>
<xsl:template match="/">
<xsl:for-each select="rule/criteria">
<xxx:when>
<xsl:for-each select="queryelement">
<xsl:choose>
<xsl:when test="code">
<xsl:variable name="code" select="code" />
<xxx:value-of select="{$code}" />
</xsl:when>
<xsl:otherwise>
<xsl:variable name="key" select="key" />
<xsl:variable name="code2" select="op/code" />
<xsl:variable name="value" select="value" />
<xxx:value-of select="{$key} {$code2} {$value}" />
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
<xsl:variable name="evaluation" select="evaluation/value" />
<xxx:value-of select="{$evaluation}" />
</xxx:when>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
И выход получается:
<xxx:when>
<xxx:value-of select="employee_id eq emp1"/>
<xxx:value-of select="and"/>
<xxx:value-of select="salary eq 10000"/>
<xxx:value-of select="10"/>
</xxx:when>
<xxx:when>
<xxx:value-of select="fname eq first"/>
<xxx:value-of select="20"/>
</xxx:when>
Вопрос Я в основном облицовкой создать переменную, которая аккумулирует текстовое содержимое узлов и хранить в переменной и использовать его в условиях испытания для
Хороший ответ, за исключением того, кажется, есть много переменных, которые на самом деле не пе потому что они используются только один раз. –
@MichaelKay Я согласен, но я только следовал предпочтениям OP. –
Спасибо, Джоэл. Оно работает – Ratish