Muenchian Grouping

时间:2014-06-17 11:20:25

标签: xslt xslt-1.0

这是我的XML代码:

<NTC_LIGHTLISTPRODUCT>
    <LIGHT_DESCRIPTION_LIST>
        <LIGHT_DESCRIPTION>
             <LIGHT_COLOUR>R</LIGHT_COLOUR>       <-- Colour 1
        </LIGHT_DESCRIPTION>
        <LIGHT_DESCRIPTION>
            <LIGHT_COLOUR>G</LIGHT_COLOUR>        <-- Colour 2
        </LIGHT_DESCRIPTION>
    </LIGHT_DESCRIPTION_LIST>
    <LIGHT_INFORMATION>
        <SIGNAL_SEQUENCE>01.0+(01.0)</SIGNAL_SEQUENCE>
        <SECTOR_LIST>
            <LIGHT_SECTOR>
                <SECTOR1_2>UNKNOWN</SECTOR1_2>   <-- Characteristic 1
                <SECTOR2_2>UNKNOWN</SECTOR2_2>
            </LIGHT_SECTOR>
            <LIGHT_SECTOR>
                <SECTOR1_2>62</SECTOR1_2>        <-- Characteristic 2
                <SECTOR2_2>83</SECTOR2_2>
            </LIGHT_SECTOR>
        </SECTOR_LIST>
    </LIGHT_INFORMATION>
</NTC_LIGHTLISTPRODUCT>

我的xslt代码:

<xsl:for-each select="LIGHT_SECTOR">
    <xsl:variable name="Sectors" select="."/>
    <xsl:text>VIS </xsl:text>
    <xsl:text> </xsl:text>
    <xsl:value-of select="SECTOR1_2"/>
    <xsl:text>-</xsl:text>
    <xsl:value-of select="SECTOR2_2"/><br/>
</xsl:for-each>

这是输出:

VIS UNKNOWN-UNKNOWN
VIS 62-83

我会:

VIS R UNKNOWN-UNKNOWN&lt; - “Vis”+颜色1 +特征1的结束 VIS G 62-83&lt; - Vis“的连续性+颜色2 +特征2

1 个答案:

答案 0 :(得分:1)

我不认为这是一个分组问题,而不是 LIGHT_DESCRIPTION LIGHT_SECTOR

之间存在1-1相关性

无论如何,您可以通过密钥查找相关的 LIGHT_DESCRIPTION 。在这种情况下,您希望按照他们的顺序查找它们:

<xsl:key name="light" match="LIGHT_DESCRIPTION" use="count(preceding-sibling::LIGHT_DESCRIPTION)" />

然后,要在迭代 LIGHT_SECTOR 时获取相关的光值,只需使用该键根据位置查找它们

<xsl:value-of select="key('light', position() - 1)/LIGHT_COLOUR" />

试试这个XSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html" indent="yes"/>

    <xsl:key name="light" match="LIGHT_DESCRIPTION" use="count(preceding-sibling::LIGHT_DESCRIPTION)" />

    <xsl:template match="/">
        <xsl:apply-templates select="//SECTOR_LIST" />
    </xsl:template>

    <xsl:template match="SECTOR_LIST">
        <xsl:for-each select="LIGHT_SECTOR">
            <xsl:variable name="Sectors" select="."/>
            <xsl:text>VIS </xsl:text>
            <xsl:value-of select="key('light', position() - 1)/LIGHT_COLOUR" />
            <xsl:text> </xsl:text>
            <xsl:value-of select="SECTOR1_2"/>
            <xsl:text>-</xsl:text>
            <xsl:value-of select="SECTOR2_2"/><br/>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>