XSL为用户生成UUID&相应地替换他们的经理参考

时间:2015-04-20 04:24:31

标签: java xml xslt uuid

我有以下XML,其中idmanagerid互相引用,其中一个managerid有很多ID,我需要将其ID转换为 {{1基于ID的目标XML。我通过扩展功能使用Java UUID。我对目标XML中的uuid class maaping genrated uuid感到震惊,我们将非常感谢您的帮助。

managerid

XSL:

<?xml version="1.0" encoding="UTF-8"?>
<userlist>
    <user>
        <id>1</id>
    </user>
    <user>
        <id>2</id>
        <managerid>1</managerid>
    </user>
    <user>
        <id>3</id>
        <managerid>1</managerid>
    </user>
    <user>
        <id>4</id>
        <managerid>2</managerid>
    </user>
    <user>
        <id>5</id>
        <managerid>3</managerid>
    </user>
    <user>
        <id>6</id>
        <managerid>1</managerid>
    </user>
    <user>
        <id>7</id>
        <managerid>2</managerid>
    </user>
    <user>
        <id>8</id>
        <managerid>3</managerid>
    </user>
    <user>
        <id>9</id>
        <managerid>3</managerid>
    </user>
    <user>
        <id>10</id>
        <managerid>1</managerid>
    </user>
</userlist>

1 个答案:

答案 0 :(得分:1)

你的问题措辞很差。如果我理解正确,经理也是用户。因此,您希望将每个用户的id替换为UUID - 如果该用户也是管理员 - 请将相应的managerid替换为相同 UUID。

这可以通过以下方式实现:

XSLT 2.0

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:uuid="java:java.util.UUID">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:variable name="new-ids">
    <xsl:for-each select="/userlist/user">
        <new-id old-id="{id}">
            <xsl:value-of select="uuid:randomUUID()"/>
        </new-id>
    </xsl:for-each>
</xsl:variable>

<xsl:key name="new-id" match="new-id" use="@old-id" />

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

<xsl:template match="id | managerid">
    <xsl:copy>
        <xsl:value-of select="key('new-id', ., $new-ids)"/>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>