使用XSLT删除简单XML文件中的重复项目

Cos*_*Dan 3 xml xslt duplicates

我是XSLT的新手,在从简单的XML文件中删除重复项时遇到问题.花了很多时间试图得到它,但它永远不会是正确的.这是源文件:

<?xml version="1.0" encoding="UTF-16"?>
<language>
    <lang name="welcome">welcom</lang>
    <lang name="open">Open</lang>
    <lang name="close">Close</lang>
    <lang name="welcome">Welcome</lang>
    <lang name="copy">Copy</lang>
</language>
Run Code Online (Sandbox Code Playgroud)

期望的输出是这样的:

<?xml version="1.0" encoding="UTF-16"?>
<language>
    <lang name="open">Open</lang>
    <lang name="close">Close</lang>
    <lang name="welcome">Welcome</lang>
    <lang name="copy">Copy</lang>
</language>
Run Code Online (Sandbox Code Playgroud)

实际文件比这大得多,"lang"和"name"可能会在文件后面更改,我只想保留最后一个副本.基本上,如果标记和属性是重复的,则只保留最后一个条目.我希望XSLT 1.0可以实现这一点.如果没有,我总是可以使用多个脚本,以防lang确实改为其他东西.先感谢您!

Vin*_*net 5

以下XSLT应该回答您的问题:

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="lang[@name=following-sibling::lang/@name]"/>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

这样,您可以过滤lang具有以下同级lang元素的每个元素,并为该name属性指定相同的值.