繁体   English   中英

如何在XSLT 2.0中引用分组元素?

[英]How to reference grouped elements in XSLT 2.0?

我想对以下XML文件进行分组:

<record>
    <word>Hallo</word><translit>XUPPY</translit><gloss>gloss1</gloss>
    <word>Bye</word><translit>EHS</translit><gloss>gloss2</gloss>
    <word>Yes</word><translit>KGR</translit><gloss>gloss3</gloss>
</record>

所需的输出是

<s>
    <set><word>Hallo</word><gloss>gloss1</gloss></set>
    <set><word>Bye</word><gloss>gloss2</gloss></set>
    <set><word>Yes</word><gloss>gloss3</gloss></set>
</s>

所以我使用for-each-group ,如

<xsl:template match="record">
    <xsl:element name="s">
        <xsl:for-each-group select="*" group-starting-with="word">
            <xsl:element name = "set">
                <xsl:copy-of select="current-group()/word"/>
                <xsl:copy-of select="current-group()/gloss"/>
            </xsl:element>
        </xsl:for-each-group>
    </xsl:element>
</xsl:template>

但是,我得到以下输出,即空组:

<s><set/><set/><set/></s> 

所以我在引用组中的元素时做错了。 但是呢 我相信这一定很简单。

wordgloss是当前组的成员 ,而不是其级。

尝试:

<xsl:template match="/record">
    <s>
        <xsl:for-each-group select="*" group-starting-with="word">
            <set>
                <xsl:copy-of select="current-group()[self::word or self::gloss]"/>
            </set>
        </xsl:for-each-group>
    </s>
</xsl:template>

current-group()为您提供current-group()所有元素,如果要选择某个元素,请使用current-group()[self::gloss]

我会取代

        <xsl:element name = "set">
            <xsl:copy-of select="current-group()/word"/>
            <xsl:copy-of select="current-group()/gloss"/>
        </xsl:element>

<set>
  <xsl:copy-of select="., current-group()[self::gloss]"/>
</set>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM