【发布时间】:2016-03-17 18:12:13
【问题描述】:
XML 输入:
<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>
我希望每个具有相同 ID 的列名 = 'Order' 在<grt> 标记中显示列名“FirstAction”的最小值。如果列名“顺序”不重复,则在<grt> 标记中显示当前<record> 标记中的“FirstAction”值。
基本上,如果相同的订单号重复自身,则采用最低的第一个动作编号,如果不是,则仅从第一个动作节点中取出值。
我似乎无法让它工作。
我的 XSL 目前显示了所有不同的 order 值,没有重复,但不知道如何为 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
-
为什么是最后一条记录,没有订单/任务值。从结果中排除?
-
因为如果我没有任何 Order 值,我就不需要使用任何这些标签...