首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >XSLT -为每个不同的值生成唯一的id

XSLT -为每个不同的值生成唯一的id
EN

Stack Overflow用户
提问于 2020-08-01 18:28:24
回答 1查看 115关注 0票数 0

我试图使用XSLT-1.0为每个不同的值生成一个唯一的id。我有一个XSMLstructure,每次在标记中找到相同的值时,我都希望在输出标记中生成一个唯一的id。

输入XML:

代码语言:javascript
运行
复制
<EMPLOYEES>
    <EMPLOYEE>
        <ID>1</ID>
        <NAME>AAA</NAME>
    </EMPLOYEE>
    <EMPLOYEE>
        <ID>2</ID>
        <NAME>AAA</NAME>
    </EMPLOYEE>
    <EMPLOYEE>
        <ID>3</ID>
        <NAME>BBB</NAME>
    </EMPLOYEE>
</EMPLOYEES>

期望产出:

代码语言:javascript
运行
复制
<RESULT>
    <EMPLOYEE>
        <ID>1</ID>
        <GROUP>1</GROUP>
    </EMPLOYEE>
    <EMPLOYEE>
        <ID>2</ID>
        <GROUP>1</GROUP>
    </EMPLOYEE>
    <EMPLOYEE>
        <ID>3</ID>
        <GROUP>2</GROUP>
    </EMPLOYEE>
</RESULT>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-01 18:52:13

您可以使用门窗群的一个变体

XSLT1.0

代码语言:javascript
运行
复制
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:key name="emp-by-name" match="EMPLOYEE" use="NAME" />

<xsl:template match="/EMPLOYEES">
    <RESULT>
        <xsl:for-each select="EMPLOYEE">
            <xsl:copy>
                <xsl:copy-of select="ID"/>
                <GROUP>
                    <xsl:value-of select="generate-id(key('emp-by-name', NAME)[1])"/>
                </GROUP>
            </xsl:copy>
        </xsl:for-each>
    </RESULT>
</xsl:template>

</xsl:stylesheet>

唯一id的格式取决于您使用的处理器:例如,使用libxslt,您可能会看到如下结果:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<RESULT>
  <EMPLOYEE>
    <ID>1</ID>
    <GROUP>idm86101615952</GROUP>
  </EMPLOYEE>
  <EMPLOYEE>
    <ID>2</ID>
    <GROUP>idm86101615952</GROUP>
  </EMPLOYEE>
  <EMPLOYEE>
    <ID>3</ID>
    <GROUP>idm86101613584</GROUP>
  </EMPLOYEE>
</RESULT> 

MSXML可以产生:

代码语言:javascript
运行
复制
<?xml version="1.0"?>
<RESULT>
<EMPLOYEE>
<ID>1</ID>
<GROUP>IDOECYH2JCFIENET332KVV31ACSEILRTQLIHKWOCNC1WN5QJBD3AH</GROUP>
</EMPLOYEE>
<EMPLOYEE>
<ID>2</ID>
<GROUP>IDOECYH2JCFIENET332KVV31ACSEILRTQLIHKWOCNC1WN5QJBD3AH</GROUP>
</EMPLOYEE>
<EMPLOYEE>
<ID>3</ID>
<GROUP>IDZZBORVA3LQGFPDQLO51JC1X1JDCTYLF430BB43GE1YQ1D54SHZSB</GROUP>
</EMPLOYEE>
</RESULT>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63208687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档