gpt4 book ai didi

xslt - 按值排序元素并删除重复项

转载 作者:行者123 更新时间:2023-12-04 06:28:32 24 4
gpt4 key购买 nike

我有以下输入:

<?xml version="1.0" encoding="utf-8"?>
<NewTerms>
<newTerm>XPath</newTerm>
<newTerm>AutoValue</newTerm>
<newTerm>XPath</newTerm>
<newTerm>context</newTerm>
<newTerm>AutoValue</newTerm>
<newTerm>language files</newTerm>
<newTerm>AutoValue</newTerm>
<newTerm>.NET</newTerm>
<newTerm>XPath</newTerm>
</NewTerms>

我想对它进行排序,它与以下功能完美结合:
  <xsl:output method="xml" indent="yes" omit-xml-declaration="no"/>

<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()">
<xsl:sort select="."/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>

</xsl:stylesheet>

问题是我得到(显然)一个排序的输出列表,其中包含重复的相同值的元素(例如 XPath、AutoValue)。我想要没有重复值的排序列表。也就是说,我希望每个值在排序的 XML 输出中只包含一次。

请问有什么建议吗?

最佳答案

这个样式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="kNewTermByValue" match="newTerm" use="."/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="NewTerms">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates
select="newTerm[count(.|key('kNewTermByValue',.)[1])=1]">
<xsl:sort/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

输出:
<NewTerms xp_0:noNamespaceSchemaLocation="../XSD\CC-CustomDocuTags.xsd" xmlns:xp_0="http://www.w3.org/2001/XMLSchema-instance">
<newTerm>.NET</newTerm>
<newTerm>AutoValue</newTerm>
<newTerm>context</newTerm>
<newTerm>EPF</newTerm>
<newTerm>language files</newTerm>
<newTerm>XPath</newTerm>
</NewTerms>

备注 : 不要将属性和子项放在一起排序,因为输出子项后无法输出属性。

关于xslt - 按值排序元素并删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5726965/

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