小编Dig*_*ers的帖子

XSLT 忽略重复元素

我刚刚开始学习 XSLT,并且无法忽略重复的元素。

我一直在搜索 Stack Overflow,看到有人问过类似的问题。我尝试了一个小例子来查看我的文件哪里出错了,并且能够忽略重复的元素。然而,当我有不止一种类型的元素时,我的问题似乎出现了。

例如:

文件1.xml

<?xml-stylesheet type="text/xsl" href="merge2.xsl"?>

<Main>
    <Records>
        <Record>
            <Description>A</Description>
        </Record>
        <Record>
            <Description>A</Description>
        </Record>
        <Record>
            <Description>B</Description>
        </Record>
        <Record>
            <Description>C</Description>
        </Record>
    </Records>
</Main>
Run Code Online (Sandbox Code Playgroud)

合并2.xsl

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
    <table border="1">
        <tr>
            <th>Type</th>
            <th>Count</th>
        </tr>
        <xsl:for-each select="Main/Records/Record">
            <xsl:if test ="not(preceding-sibling::Record(Description/text() = current()/Description/text()])">
                <tr>
                    <td><xsl:value-of select="Description"/></td>
                    <td><xsl:value-of select="count(//Record[Description/text()=current()/Description/text()])"/></td>
                </tr>
            </xsl:if>
        </xsl:for-each>
    </table>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

这很好用,并给了我想要的结果。

Type    Count
 A        2
 B        1
 C        1
Run Code Online (Sandbox Code Playgroud)

但是,如果我要添加另一个 Records 元素,它似乎会一个接一个地处理这两个元素,例如

<?xml-stylesheet type="text/xsl" href="merge2.xsl"?>

<Main>
    <Records>
        <Record>
            <Description>A</Description>
        </Record>
        <Record>
            <Description>A</Description> …
Run Code Online (Sandbox Code Playgroud)

xml xslt xpath

2
推荐指数
1
解决办法
9875
查看次数

标签 统计

xml ×1

xpath ×1

xslt ×1