【问题标题】:How do I make group-by ignore white-space in XSLT?如何让 group-by 忽略 XSLT 中的空白?
【发布时间】:2011-12-08 18:32:21
【问题描述】:

我有一个 xml 文件,我需要使用 xsl:for-each-group 对其进行分组。一切正常,但问题出在元素末尾有空格时(例如<word>test </word> and <word>test</word>),但我需要将它们视为一组。

这是示例 xml 文件:

<u>
  <s>
    <w>this </w>
    <w>is </w>
    <w>a </w>
    <w>test </w>
  </s>
  <s>
    <w>this</w>
    <w>is</w>
    <w>a</w>
    <w>test</w>
  </s>
<u>

这是 xslt 代码

<xsl:for-each-group select="bncDoc/stext/div/u/s" group-by="w" >
  <tr>  
    <td style="text-align: center;">
      <xsl:value-of select="current-grouping-key()"/>
    </td>
    <td>
      <xsl:value-of select="count(current-group())"/>
    </td>
  </tr>
</xsl:for-each-group>

有什么解决方法吗?

【问题讨论】:

  • 如果您发布了您尝试生成的输出示例,将会很有帮助。目前尚不清楚您是否需要调整您的 select 语句或 group-by(或两者)。
  • 我只需要调整group-by语句。

标签: xslt xslt-2.0 xslt-grouping


【解决方案1】:
<xsl:for-each-group select="bncDoc/stext/div/u/s/w" group-by="normalize-space()">
   <!-- ... -->
</xsl:for-each-group>

【讨论】:

  • 我是使用 normalize-space 完成的,但我得到了这个错误:A sequence of multiple item is not allowed as the first argument of normalize-space()
  • @Peymankh:如果有多个&lt;word&gt; 孩子,你想分组到哪一个?
  • 我想根据 对它们进行分组
  • @Peymankh:是的,但显然每个组不止一个词,不是吗?
  • @Peymankh:查看修改后的答案。未来提示:始终在您的问题中包含相关的 XML。
【解决方案2】:

好的,找到答案了:

你只需要这样使用normailize-space():

    <xsl:for-each-group select="bncDoc/stext/div/u/s/w" group-by="normalize-space((text())">
        .
        .
        .
    </xsl:for-each-group>

【讨论】:

  • 有了@select,你也可以只使用group-by="normalize-space()"。你想要的是每个独特的&lt;w&gt;。在问题中提及这一点会很有帮助,Tomalak 可以给你一个准确的答案。
  • 顺便说一下,回答你自己的问题 +1。
  • @Mads:这是我几个小时前给出的确切答案……
  • @Tomalak - 就是这样。我看过第一个版本,没有注意到修改。
  • 我将把我的答案留在这里,但自从@Tomalak 提出答案后,我会将其设置为正确答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-05
  • 1970-01-01
相关资源
最近更新 更多