我有以下输入内容
<LOV_List>
<LOV>
<DisplayValue>...</DisplayValue>
<Code>15</Code>
</LOV>
<LOV>
<DisplayValue>...</DisplayValue>
<Code>15</Code>
</LOV>
...
<LOV_List>
我正在尝试获得以下输出
<List>
<values>
<Id>1</Id>
<DisplayValue1>...</DisplayValue1>
<DisplayValue2>..</DisplayValue2>
<values>
</List>
但是为了得到它,我需要比较<Code>
的值。如果该值与我需要返回的节点的DisplayValues
相同。
我是新来的,所以请给我一些指示。
答案 0 :(得分:1)
这是一种分组的情况,由于您使用的是XSLT 1.0,因此必须使用muenchian grouping才能获得所需的输出。
定义一个键,以使用Code
的值对元素进行分组。
<xsl:key name="kCode" match="LOV" use="Code" />
使用其ID和键匹配分组的元素。
<xsl:template match="LOV[generate-id() = generate-id(key('kCode', Code)[1])]">
<values>
<Id><xsl:number format="1" /></Id>
<xsl:for-each select="key('kCode', Code)">
<DisplayValue>
<xsl:value-of select="DisplayValue" />
</DisplayValue>
</xsl:for-each>
</values>
</xsl:template>
完整的XSLT如下
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" />
<xsl:strip-space elements="*" />
<xsl:key name="kCode" match="LOV" use="Code" />
<xsl:template match="LOV_List">
<List>
<xsl:apply-templates />
</List>
</xsl:template>
<xsl:template match="LOV[generate-id() = generate-id(key('kCode', Code)[1])]">
<values>
<Id><xsl:number format="1" /></Id>
<xsl:for-each select="key('kCode', Code)">
<xsl:copy-of select="DisplayValue" />
</xsl:for-each>
</values>
</xsl:template>
<xsl:template match="LOV" />
</xsl:stylesheet>
输出
<List>
<values>
<Id>1</Id>
<DisplayValue>..</DisplayValue>
<DisplayValue>....</DisplayValue>
</values>
</List>