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

标签 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="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)到某些界面中。

规则#1:name第一个标签item每个records tag(实际文件中有很多条记录)变成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>

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

相关文章:

java - tiles-defs.xml dtds版本

java - 如何使用 main.xml 中定义的布局添加按钮?

xml - 你如何添加图像?

java - 修复 html 中未闭合的标签或使用 HTML 解析器解析以进行 XSLT 转换

xml - 使用 XSLT 2.0 读取文本文件时如何添加父元素?

java - 递归方法不起作用 - ArrayList<String>

php - php simplexml_load_file 中的执行时间问题

javascript - InDesign 启动脚本不从 XML 导入加载图像的问题

sql-server - 是否可以使用 SQL Server 或 SSIS 解析此 XML 文件?

java - 关于XML解析的问题