如何处理 XSLT 中未分组但相关的数据并生成分组输出?

燃烧器

我正在编写一个XSLT 2.0脚本,它需要一个(设计不佳的)XML 输入文档,并且应该生成一个更易于处理的 XML 输出文档。

输入文档如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <element>
        <subelement id="1_1">1.1</subelement>
    </element>
    <element>
        <subelement id="1_2">1.2</subelement>
    </element>
    <element>
        <subelement id="1_foo">1.foo</subelement>
    </element>
    <element>
        <subelement id="1_bar">1.bar</subelement>
    </element>
    <element>
        <subelement id="2_1">2.1</subelement>
    </element>
    <element>
        <subelement id="2_2">2.2</subelement>
    </element>
    <element>
        <subelement id="2_foo">2.foo</subelement>
    </element>
    <element>
        <subelement id="2_bar">2.bar</subelement>
    </element>
</root>

有一些应用,以确定相关的子元素的商业逻辑:
idsubelement和部分左下划线(的_)是数据记录ID,而右边部分是id字段。

XSLT 过程所需的 XML 输出应如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <record id="1">
        <field id="1">1.1</field>
        <field id="2">1.2</field>
        <field id="foo">1.foo</field>
        <field id="bar">1.bar</field>
    </record>
    <record id="2">
        <field id="1">2.1</field>
        <field id="2">2.2</field>
        <field id="foo">2.foo</field>
        <field id="bar">2.bar</field>
    </record>
</root>

这是一个非常基本的例子,但它说明了可以接受的任务。

重要提示:输入文档的顺序是随机的。

如果可能,转换应该在一个单一的转换中发生。

如何处理这个任务?

山姆

你可以试试这个: using for-each-group

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">
    <xsl:output method="xml" omit-xml-declaration="no" indent="yes"/>
    <xsl:template match="root">
        <xsl:copy>
            <xsl:for-each-group select="element" group-by="substring-before(subelement/@id, '_')">
                <record>
                <xsl:for-each select="current-group()">
                    <field id="{substring-after(subelement/@id, '_')}">
                        <xsl:value-of select="normalize-space(.)"/>
                    </field>
                </xsl:for-each>
                </record>
            </xsl:for-each-group>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何处理XSLT中的处理指令

来自分类Dev

如何处理xslt中不同的相同节点

来自分类Dev

如何处理从XML和XSLT文件生成的文本文件中的空格?

来自分类Dev

XSLT如何处理多个嵌套元素?

来自分类Dev

XSLT-如何在XSLT 2.0中按公共子元素值对输出进行分组

来自分类Dev

如何处理“dir”的输出?

来自分类Dev

如何处理对ItemsSource的输出?

来自分类Dev

如何处理某些新类型分组

来自分类Dev

Powershell:如何处理分组对象的值?

来自分类Dev

如何处理JSON数据?

来自分类Dev

如何处理移位的数据

来自分类Dev

如何处理CSV数据?

来自分类Dev

如何处理 fixedLengthformat 数据?

来自分类Dev

xslt apply-template 如何处理相同的子树匹配?

来自分类Dev

在XSLT中处理空白

来自分类Dev

如何处理根据成分变化的类型?

来自分类Dev

XSLT XPath:如果更新了一个子节点,从不同的子节点(对于同一个worker)获取数据-如何处理?

来自分类Dev

如何处理JSON中的缺失数据

来自分类Dev

如何处理python中的json数据?

来自分类Dev

如何处理函数中的“数据”参数?

来自分类Dev

如何处理(汇总)R中的数据?

来自分类Dev

如何处理 MVVM 中的数据?

来自分类Dev

如何处理对象集合中的数据?

来自分类Dev

如何处理Angular中@input的数据?

来自分类Dev

如何处理Promise中的数据

来自分类Dev

如何处理DataGridView框中的数据?

来自分类Dev

如何处理数据帧中的负值

来自分类Dev

如何处理 ComponentDidUpdate 中的异步数据?

来自分类Dev

XSLT - 分组 XML 数据