XML Вход:XSLT Выберите наименьшее значение узла на основе матча ид
<Root>
<output>
<queries>
<query name="Test">
<parameters>
<parameter>298674,298673,298675,298676</parameter>
</parameters>
<queryResults>
<record id="1">
<column name="Order">272334</column>
<column name="Task">272093</column>
<column name="FirstAction">2709305</column>
</record>
<record id="2">
<column name="Order">272334</column>
<column name="Task">272093</column>
<column name="FirstAction">2709301</column>
</record>
<record id="3">
<column name="Order">272334</column>
<column name="Task">272093</column>
<column name="FirstAction">2709306</column>
</record>
<record id="4">
<column name="Order">268997</column>
<column name="Task">268756</column>
<column name="FirstAction">2709307</column>
</record>
<record id="5">
<column name="Order"/>
<column name="Task"/>
<column name="FirstAction">2709307</column>
</record>
</queryResults>
</query>
</queries>
</output>
</Root>
Желаемая Выход:
<Tag1>
<Tag2>
<parameters>
<order id="272334"/>
<order id="268997"/>
<task id="272093">
<grt>
<action id="2709301"/>
</grt>
</task>
<task id="268756">
<grt>
<action id="2709307"/>
</grt>
</task>
</parameters>
</Tag2>
</Tag1>
Я хочу, чтобы для каждого имени столбца = «Order», который имеет тот же идентификатор, чтобы показать в <grt>
отметьте самое нижнее значение имени столбца «FirstAction». Если имя столбца «Заказ» не повторяется, то в <grt>
отметьте значение «FirstAction» с текущего тега <record>
. В принципе, если один и тот же номер заказа повторяется, возьмите младший номер первого действия, если нет, то просто возьмите значение из первого узла действия. Я не могу заставить работать.
В настоящее время XSL показывает все отдельные значения для заказа без повторения, но не знает, как это сделать для узла FirstAction.
Мой XSL:
<xsl:template match="/">
<Tag1>
<Tag2>
<parameters>
<xsl:for-each select="//record/column[@name='Order'][not(.=preceding::*)]">
<order>
<xsl:attribute name="id"><xsl:value-of select="."/></xsl:attribute>
</order>
</xsl:for-each>
<xsl:for-each select="//record/column[@name='Task'][not(.=preceding::*)]">
<task>
<xsl:attribute name="id"><xsl:value-of select="."/></xsl:attribute>
<grt>
<action>
<xsl:attribute name="id"><xsl:value-of select="current()/@column[@name='FirstAction']"/></xsl:attribute>
</action>
</grt>
</task>
</xsl:for-each>
</parameters>
</Tag2>
</Tag1>
</xsl:template>
</xsl:stylesheet>
Большое спасибо!
Вы можете использовать XSLT 2.0? –
Нет :(только 1.0 к сожалению – user3529643
Почему последняя запись без значений Order/task исключена из результата? –