使用 XSLT 中的某些键合并数据

质量保证

我有一个输入 XML 文件:

<root>
   <row>
     <col1>cust001</col1>
     <col2>cc1</col2>
     <col3>po1</col3>
     <col4>2020-02-22</col4>
     <col5>Men</col5>
     <col6>item1</col6>
     <col7>60</col7>
   </row>
   <row>
     <col1>cust001</col1>
     <col2>cc1</col2>
     <col3>po1</col3>
     <col4>2020-02-22</col4>
     <col5>Men</col5>
     <col6>item2</col6>
     <col7>50</col7>
   </row>
</root> 

所需输出:(如果 col1 到 col5 相同,则合并为一行。)

<root>
       <row>
         <col1>cust001</col1>
         <col2>cc1</col2>
         <col3>po1</col3>
         <col4>2020-02-22</col4>
         <col5>Men</col5>
         <col6>item1</col6>
         <col7>60</col7>
         <col6>item2</col6>
         <col7>50</col7>
       </row>
    </root> 

我正在尝试此处的代码XSLT Consolidating data when ID is the same but I get, Error in Expression current-group(): Unknown system function: current group。

<xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns="http://www.castiron.com//response">

   <xsl:output method="xml" indent="yes"/>

   <xsl:template match="resultSets">
      <xsl:apply-templates select="@*|node()"/>
   </xsl:template>

   <xsl:template match="resultSet">
      <xsl:apply-templates select="@*"/>
      <xsl:for-each-group select="root/row" group-by="concat(col1,col2,col3,col4,col5)">            
            <xsl:value-of select="current-grouping-key()"/>
            <xsl:apply-templates select="current-group()" />            
      </xsl:for-each-group>
   </xsl:template>

马丁·霍南

假设您使用 XSLT 3 处理器,如 Saxon 9.8 或更高版本或 AltovaXML 2017 R3 或更高版本,您可以使用要用作分组键的元素的复合分组键,然后,在内部,您当然需要确保创建row每个组一个,并且只处理一次形成分组键的项目(例如,对于组中的第一个项目,它是 中的上下文项目for-each-group),然后处理组中所有项目的所有其他元素:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="#all"
    version="3.0">

  <xsl:output indent="yes"/>

  <xsl:mode on-no-match="shallow-copy"/>

  <xsl:template match="root">
      <xsl:copy>
          <xsl:for-each-group select="row" composite="yes" group-by="col1, col2, col3, col4, col5">
              <xsl:copy>
                  <xsl:apply-templates select="col1, col2, col3, col4, col5, current-group()/(* except (col1, col2, col3, col4, col5))"/>
              </xsl:copy>
          </xsl:for-each-group>
      </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

https://xsltfiddle.liberty-development.net/jz1Q1yt

或者,for-each-group在将关键元素与

  <xsl:template match="root">
    <xsl:copy>
        <xsl:for-each-group select="row!copy-of()" composite="yes" group-by="col1, col2, col3, col4, col5">
            <xsl:copy>
                <xsl:apply-templates select="current-group()/(if (position() eq 1) then * else (* except (col1, col2, col3, col4, col5)))"/>
            </xsl:copy>
        </xsl:for-each-group>
    </xsl:copy>
  </xsl:template>

https://xsltfiddle.liberty-development.net/jz1Q1yt/1

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在使用XPath的XSLT中

来自分类Dev

xslt使用键和变量

来自分类Dev

使用 xslt 遍历 json 数据

来自分类Dev

使用XSLT映射XML数据

来自分类Dev

使用XSLT的XML数据透视

来自分类Dev

使用 XSLT 转换 XML 数据

来自分类Dev

使用XSLT合并多个xml文件中的数据而没有重复项

来自分类Dev

发生某些值后,使用XSLT过滤XML中的记录

来自分类Dev

XSLT仅使用XSLT 1.0从FMPXMLRESULT动态重组XML数据

来自分类Dev

使用xslt更改某些元素的值

来自分类Dev

使用XSLT基于属性合并Xml元素

来自分类Dev

使用xslt合并两个xml

来自分类Dev

使用XSLT合并来自不同节点的值

来自分类Dev

使用 XSLT 1.0 避免在 XSLT 模板规则中重复

来自分类Dev

XSLT:对结果树片段使用键吗?

来自分类Dev

使用XSLT从两个XML文件中获取数据并合并到一个文件中?

来自分类Dev

从 XML 数据中获取正确数据(使用 XSLT)

来自分类Dev

使用xslt转换嵌套的xml数据

来自分类Dev

使用XSLT 1.0的模拟数据透视表

来自分类Dev

使用XSLT根据属性修改数据

来自分类Dev

使用 XSLT 填充垂直列数据

来自分类Dev

使用XSLT剥离EMPTY数据元素

来自分类Dev

使用XSLT从XML数据转换为XForms

来自分类Dev

如何使用 XSLT 从 url 显示 XML 数据

来自分类Dev

使用父元素在 XSLT 中拆分/分组

来自分类Dev

使用XSLT编辑特定属性中的值

来自分类Dev

使用xslt反转XML中的内容

来自分类Dev

使用XSLT从XML中删除节点

来自分类Dev

使用XSLT获取String中的文本