在xsl中分组

时间:2012-05-27 16:11:27

标签: xml xslt

我得到了像这样的xml

<feature ufi="-1578440">
    <designation>PPLA</designation>  
    <administrative_division>06</administrative_division>
    <name_type>V</name_type>
    <full_name>Hobart Town</full_name>
    <sort_key>HOBARTTOWN</sort_key>
    <modified>2012-02-06</modified>
</feature>
<feature ufi="-1578440">
    <designation>PPLA</designation>
    <administrative_division>06</administrative_division>
    <name_type>N</name_type>
    <full_name>Hobart</full_name>
    <sort_key>HOBART</sort_key>
    <modified>2012-02-06</modified>
</feature>

基本上,除了name_type之外,2个字段的信息是相似的。所以我想使用xsl分组生成类似的输出。

Hobart (also known as Hobart Town), PPLA, V, 2012-02-06

有人能告诉我实现结果的简单方法吗?非常感谢

编辑:我想用xsl版本1来做,键是ufi

1 个答案:

答案 0 :(得分:1)

不涉及分组,但这将完成工作(假设纯文本输出并忽略换行符,留作练习):

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">
    <xsl:output method="text"/>

    <xsl:template match="feature[name_type='N']">
        <xsl:value-of select="full_name"/>
        <xsl:variable name="ufi" select="@ufi"/>
        (also known as <xsl:value-of select="../feature[name_type='V' and @ufi=$ufi]/full_name"/>)
        , <xsl:value-of select="designation"/>, <xsl:value-of select="name_type"/>, <xsl:value-of select="modified"/>
    </xsl:template>

    <xsl:template match="feature"/>
</xsl:stylesheet>

使用xslt 2.0会好得多..