我有以下XML,其中id
和managerid
互相引用,其中一个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>
答案 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>