【问题标题】:XSL 1.0 separate groupingXSL 1.0 单独分组
【发布时间】:2018-11-28 16:05:26
【问题描述】:

我有以下 XML。

<word>
    <lemma POS="глагол" Aspect="несвършен"  Transitive= "непреходен">викам</lemma>
    <morph>
      <FiniteForm Tense="present" Person="1" Number="ед.ч.">викам</FiniteForm>
      <FiniteForm Tense="present" Person="2" Number="ед.ч.">викаш</FiniteForm>
      <FiniteForm Tense="present" Person="3" Number="ед.ч.">вика</FiniteForm>
      <FiniteForm Tense="past_simple" Person="2" Number="ед.ч.">вика</FiniteForm>
      <FiniteForm Tense="past_simple" Person="3" Number="ед.ч.">вика</FiniteForm>
      <FiniteForm Tense="past_continues" Person="1" Number="ед.ч.">виках</FiniteForm>
      <FiniteForm Tense="past_continues" Person="2" Number="ед.ч.">викаше</FiniteForm>
      <FiniteForm Tense="past_continues" Person="3" Number="ед.ч.">викаше</FiniteForm>
   </morph>
</word>
<word>
    <lemma POS="глагол" Aspect="несвършен"  Transitive= "непреходен">вървя</lemma>
    <morph>
      <FiniteForm Tense="present" Person="1" Number="ед.ч.">вървя</FiniteForm>
      <FiniteForm Tense="present" Person="2" Number="ед.ч.">вървиш</FiniteForm>
      <FiniteForm Tense="present" Person="3" Number="ед.ч.">вървят</FiniteForm>
      <FiniteForm Tense="past_simple" Person="2" Number="ед.ч.">вървят</FiniteForm>
      <FiniteForm Tense="past_simple" Person="3" Number="ед.ч.">вървя</FiniteForm>
      <FiniteForm Tense="past_continues" Person="1" Number="ед.ч.">вървях</FiniteForm>
      <FiniteForm Tense="past_continues" Person="2" Number="ед.ч.">вървеше</FiniteForm>
      <FiniteForm Tense="past_continues" Person="3" Number="ед.ч.">вървеше</FiniteForm>
   </morph>
</word>

对不起,西里尔符号。我想要的是按 FiniteForm @Tense 对每个单词进行分组。我目前正在做的是循环遍历每个单词。并表演孟契亚组合。问题是我的键实际上匹配每个 FiniteForm,我希望它只匹配我所在的单词标签内的那些 FiniteForm 标签。

这就是我目前创建密钥的方式。

<xsl:key name="finiteFormsByTense" match="FiniteForm" use="@Tense" />

这就是我所做的。

<xsl:for-each select="word">
<xsl:for-each select="morph/FiniteForm[generate-id() = generate-id(key('finiteFormsByTense', @Tense)[1])]">
    <xsl:variable name="current-grouping-key" select="@Tense"/>
    <xsl:variable name="current-group" select="key('finiteFormsByTense', $current-grouping-key)"/>
    <xsl:variable select="count($current-group)+1" name="groupSize"/>
    <tr>
        <td rowspan="{$groupSize}">
            <xsl:value-of select="$current-grouping-
        </td>
    </tr>
    <xsl:for-each select="$current-group">
        <tr>
            <td><xsl:value-of select="@Person"/></td>
            <td><xsl:value-of select="@Number"/></td>
            <td><xsl:value-of select="."/></td>
        </tr>
</xsl:for-each>
</xsl:for-each>

【问题讨论】:

  • 您需要一个将lemma(或word 的内部ID)与Tense 连接起来的键。向我们展示一些代码,以便我们在必要时为您修复它。
  • 我更新了问题g,包括代码。

标签: xml xslt


【解决方案1】:

将您的密钥定义为:

<xsl:key name="finiteFormsByTense" match="FiniteForm" use="concat(generate-id(..), '|', @Tense)" />

然后将其用作:

<xsl:for-each select="morph/FiniteForm[generate-id() = generate-id(key('finiteFormsByTense', concat(generate-id(..), '|', @Tense))[1])]">

这会将父morph的id添加到key中,这样每个morph的form就单独分组了。

【讨论】:

    猜你喜欢
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多