XSLT一级分组

XSLT一级分组,xslt,xslt-grouping,muenchian-grouping,Xslt,Xslt Grouping,Muenchian Grouping,输入: 23 麦克风 对 23 XrJ 对 23 母马 对 574 麦克风 对 574 中心人 对 期望输出: <Root> <line id="1"> <subline name="id">23</subline> <subline name="text">mic</subline> <subline name="Available">yes</subline>

输入:


23
麦克风
对
23
XrJ
对
23
母马
对
574
麦克风
对
574
中心人
对
期望输出:

<Root>
<line id="1">
    <subline name="id">23</subline>
    <subline name="text">mic</subline>
    <subline name="Available">yes</subline>
    <subline name="Unavailable"/>
</line>
<line id="2">
    <subline name="id">23</subline>
    <subline name="text">XrJ</subline>
    <subline name="Available"/>
    <subline name="Unavailable">yes</subline>
</line>
<line id="3">
    <subline name="id">23</subline>
    <subline name="text">mare</subline>
    <subline name="Available"/>
    <subline name="Unavailable">yes</subline>
</line>
<line id="4">
    <subline name="id">574</subline>
    <subline name="text">mic</subline>
    <subline name="Available">yes</subline>
    <subline name="Unavailable"/>
</line>
<line id="5">
    <subline name="id">574</subline>
    <subline name="text">centrer</subline>
    <subline name="Available">yes</subline>
    <subline name="Unavailable"/>
</line>
</Root>

23
麦克风
对
XrJ
对
母马
对
574
麦克风
对
中心人
对
我的愿望是,对于每个唯一ID,使用子行“TEXT”中的值构建不同的“DIFF”标记,并添加该文本是否可用,如您所见,我们在子行中有此信息-“available”/“available”

因此,对于“DIFF”标记中的每个唯一ID,其值应为text(来自每个记录),标记为“available”或“unavailable”,文本为YES

我似乎无法理解如何做这样的事情,我所做的每一个xsl都没有返回任何东西,所以我放弃了,现在我陷入了困境

请帮忙,非常感谢你帮了一个noob

编辑:

我的XSL:

<Root>
<update>
    <id>23</id>
    <reqUpdate>
        <diff>
            <text>mic</text>
            <available>yes</available>
        </diff>
        <diff>
            <text>XrJ</text>
            <unavailable>yes</unavailable>
        </diff>
        <diff>
            <text>mare</text>
            <unavailable>yes</unavailable>
        </diff>
    </reqUpdate>
</update>
<update>
    <id>574</id>
    <reqUpdate>
        <diff>
            <text>mic</text>
            <available>yes</available>
        </diff>
        <diff>
            <text>centrer</text>
            <available>yes</available>
        </diff>
    </reqUpdate>
</update>
</Root>

对
对
和我的当前输出:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml"/>
<xsl:key name="record" match="line" use="subline[@name='id']"/>
<xsl:template match="Root">
    <Root>
        <xsl:for-each select="line[generate-id(.)=
  generate-id(key('record',subline[@name='id'])[1])]">
            <update>
                <id>
    <xsl:value-of select="subline   [@name='id']"/>
                </id>
                <reqUpdate>
                    <xsl:variable name="values" select="key('record',subline[@name='id'])/subline[@name='Available']"/>
                    <xsl:choose>
                        <xsl:when test="$values">
                            <xsl:for-each select="$values">
                                <dif>
                                    <text>
                                        <xsl:value-of select="./subline[name='text']"/>
                                    </text>
                                    <available>yes</available>
                                </dif>
                            </xsl:for-each>
                        </xsl:when>
                        <xsl:when test="not($values)">
                            <xsl:for-each select="$values">
                                <dif>
                                    <text>
                                        <xsl:value-of select="./subline[name='text']"/>
                                    </text>
                                    <unavailable>yes</unavailable>
                                </dif>
                            </xsl:for-each>
                        </xsl:when>
                    </xsl:choose>
                </reqUpdate>
            </update>
        </xsl:for-each>
    </Root>
</xsl:template>
</xsl:stylesheet>
在此处输入代码
23
对
对
对
574
对
对

我建议您这样做:

XSLT1.0

enter code here
    <Root>
<update>
    <id>23</id>
    <reqUpdate>
        <dif>
            <text/>
            <available>yes</available>
        </dif>
        <dif>
            <text/>
            <available>yes</available>
        </dif>
        <dif>
            <text/>
            <available>yes</available>
        </dif>
    </reqUpdate>
</update>
<update>
    <id>574</id>
    <reqUpdate>
        <dif>
            <text/>
            <available>yes</available>
        </dif>
        <dif>
            <text/>
            <available>yes</available>
        </dif>
    </reqUpdate>
</update>
</Root>

对
对


p.S.IMHO,目标结构不是最优的;我希望节点具有固定名称(例如
可用
)和更改内容(例如
)。您现在的处理方式将与原来的处理方式一样棘手。

我建议您这样做:

XSLT1.0

enter code here
    <Root>
<update>
    <id>23</id>
    <reqUpdate>
        <dif>
            <text/>
            <available>yes</available>
        </dif>
        <dif>
            <text/>
            <available>yes</available>
        </dif>
        <dif>
            <text/>
            <available>yes</available>
        </dif>
    </reqUpdate>
</update>
<update>
    <id>574</id>
    <reqUpdate>
        <dif>
            <text/>
            <available>yes</available>
        </dif>
        <dif>
            <text/>
            <available>yes</available>
        </dif>
    </reqUpdate>
</update>
</Root>

对
对


p.S.IMHO,目标结构不是最优的;我希望节点具有固定名称(例如
可用
)和更改内容(例如
)。现在的处理方式将和原来的处理方式一样棘手。

如果您知道需要应用(即使用XSLT 1.0处理器),那么为什么不这样做呢?如果您尝试过但失败了,请发布您的尝试,以便我们可以修复它,而不必从头开始为您编写代码。您好。更新..已经足够近了,但还不太近,我不确定我错过了什么。非常感谢。您是否被迫使用XSLT1.0?在2.0版中,您可以使用for-each-group。如果您知道需要应用(即使用XSLT1.0处理器),那么为什么不这样做呢?如果您尝试过但失败了,请发布您的尝试,以便我们可以修复它,而不必从头开始为您编写代码。您好。更新..已经足够近了,但还不太近,我不确定我错过了什么。非常感谢。您是否被迫使用XSLT1.0?在版本2.0中,您可以为每个组使用。