XSLT:如何用所有同级的串联代替第一个同级?

露西

我很难实现XSL转换。

我需要对此进行转换:

<records>
    <item>
        <id type="uid">1</id>
        <name>Homepage</name>
        <attr>AB308E</attr>
    </item>
    <item>
        <id type="uid">5</id>
        <name>Electronics</name>
        <attr>F04550</attr>
    </item>
    <item>
        <id type="uid">8</id>
        <name>Accessories</name>
        <attr>00EE80</attr>
    </item>
</records>

到这个:

<records>
    <item>
        <id type="uid">1</id>
        <category>Homepage - Electronics - Accessories</category>
        <attr>AB308E</attr>
    </item>
    <item>
        <id type="uid">5</id>
        <name>Electronics</name>
        <attr>F04550</attr>
    </item>
    <item>
        <id type="uid">8</id>
        <name>Accessories</name>
        <attr>00EE80</attr>
    </item>
</records>

我知道从语义上讲并没有多大意义,但这是我需要的一种技巧,以便以特定方式将数据注入某个接口。

规则1:每个标签name的第item一个records标签(实际文件中有很多记录)变成category并包含当前records作用域中所有项目名称的串联

规则2:item不是第一个子标签的标签records保持不变。

我尝试使用<xsl:value-of select="concat(' - ', .)"/>规则,但没有运气。

有人知道如何实现这一目标吗?

文森特

试试这个:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="records/item[1]/name">
        <category>        
            <xsl:for-each select="../../item/name">
                <xsl:value-of select="." />
                <xsl:if test="position() != last()">
                    <xsl:value-of select="' - '" />
                </xsl:if>
            </xsl:for-each>
        </category>
    </xsl:template>
</xsl:stylesheet>

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从给定元素的第一个同级获取文本

仅当第一个元素具有其他同级对象时才定位

如何使用querySelector检索div的第一个子元素同级节点?

如何从不是第一个组件的同级组件的另一个组件执行功能?

从一个同级组件分派 redux 操作时,如何让所有同级组件正确重新渲染?

XSLT-选择给定标签的所有同级,直到另一个标签(再次)

jQuery-查找第一个同级匹配选择器

重置函数时将类移至第一个同级

为每个第一个元素获取XPath并计算任何XML输入的同级事件

选择存储在变量中的元素的第一个同级

硒返回错误的元素,选择第一个同级元素,而不是查看元素本身

如何选择前一个同级

如何附加一个新的div元素,它是使用d3创建的第一个div的同级元素?

如何将所有同级文件夹移动到一个文件夹中?

为什么第一个线框没有空间垂直对齐时,同级线框会垂直对齐?

如何打印第一个单词是文件的第一个单词的所有行?

仅限CSS-当:hover悬停在任何同级上时,使第一个元素改变颜色

来自一个组件的Apollo查询会更新Vue中的所有同级

如何用sed代替除了一个字符外的所有字符

如何从同级组件导航到Angular中的另一个同级组件?

如何在REACT中从另一个同级或导入的组件更新同级组件的状态

如何围绕同级HTML元素绘制一个框?

第一个参数包含所有参数

如何获取python字典的所有第一个元素?

如何删除除第一个元素外的所有子元素?

如何提取数组对象的所有第一个对象?

如何删除所有重复的图像只保留第一个?

如何删除所有字母,直到使用sed的第一个数字?

如何取除第一个 k 以外的所有元素