gpt4 book ai didi

xml - XSLT:如何用所有 sibling 的串联替换第一个 sibling ?

转载 作者:行者123 更新时间:2023-12-04 08:08:00 26 4
gpt4 key购买 nike

我很难尝试实现 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>
我知道从语义上讲它没有多大意义,但这是我需要的一种技巧,以便以特定方式将数据注入(inject)某个接口(interface)。
规则 #1: name第一个 item 的标签每个 records tag(实际文件中有很多记录)变成 category并包含当前 records 中所有项目名称的串联。范围
规则 #2: item不是 records 的第一个 child 的标签不变。
我尝试使用 <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>

关于xml - XSLT:如何用所有 sibling 的串联替换第一个 sibling ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66127319/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com