Xml XSLT:如何用所有同级的串联替换第一个同级?
我很难实现XSL转换 我需要改变这一点:Xml XSLT:如何用所有同级的串联替换第一个同级?,xml,xslt,xml-parsing,xslt-1.0,xslt-2.0,Xml,Xslt,Xml Parsing,Xslt 1.0,Xslt 2.0,我很难实现XSL转换 我需要改变这一点: <records> <item> <id type="uid">1</id> <name>Homepage</name> <attr>AB308E</attr> </item> <item> <id type="u
<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>
1.
主页
AB308E
5.
数码产品
F04550
8.
配件
00EE80
为此:
<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.
主页-电子产品-配件
AB308E
5.
数码产品
F04550
8.
配件
00EE80
我知道从语义上讲它没有多大意义,但为了以特定的方式将数据注入到某个接口中,我需要使用这种方法
规则#1:每个记录的第一个项
标记的名称
标记(实际文件中有许多记录)变成类别
,并包含当前记录
范围中所有项的名称的串联
规则#2:项
不是记录
的第一个子项的标记将保持不变
我尝试使用
规则,但没有成功
有人知道如何实现这一点吗?使用身份转换作为基本模板并添加一个模板
<xsl:template match="records/item[1]/name">
<category>
<xsl:value-of select="., ../following-sibling::item/name" separator=" - "/>
</category>
</xsl:template>
试试这个:
<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>
使用