我需要从 xml 中删除重复项+设置正确的序列,即 10、20、30 等。
我的xml:
<?xml version="1.0" encoding="UTF-8"?>
<serviceInvocationRequests>
<serviceInvocationRequest>
<requests>
<workCenter>04901</workCenter>
<description>Some random description</description>
<resourceMemberList>
<resource>R4902A01</resource>
<sequence>10</sequence>
</resourceMemberList>
<resourceMemberList>
<resource>R4902A02</resource>
<sequence>10</sequence>
</resourceMemberList>
<resourceMemberList>
<resource>R4902A01</resource>
<sequence>10</sequence>
</resourceMemberList>
<resourceMemberList>
<resource>R4902A02</resource>
<sequence>10</sequence>
</resourceMemberList>
</requests>
</serviceInvocationRequest>
</serviceInvocationRequests>
我的用于删除重复项的 xslt: (目前适用于 1 个值(常见:资源),但可能我需要更多 - 这就是添加 concat 的原因)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" method="xml"/>
<xsl:strip-space elements="*"/>
<xsl:key match="resourceMemberList" name="group-key" use="concat(resource, '|')"/>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="resourceMemberList[generate-id() = generate-id(key('group-key', concat(resource, '|'))[1])]">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="resourceMemberList"/>
</xsl:stylesheet>
删除重复项效果很好,但我需要将序列设置为 10 和 20
<?xml version="1.0" encoding="UTF-8"?>
<serviceInvocationRequests>
<serviceInvocationRequest>
<requests>
<workCenter>04901</workCenter>
<description>Some random description</description>
<resourceMemberList>
<resource>R4902A01</resource>
<sequence>10</sequence>
</resourceMemberList>
<resourceMemberList>
<resource>R4902A02</resource>
<sequence>10</sequence>
</resourceMemberList>
</requests>
</serviceInvocationRequest>
</serviceInvocationRequests>
我怎样才能实现这一目标? 当我尝试向 xslt 添加某些内容时,重复逻辑就会被破坏。 谢谢!
我会用
xsl:number
:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:key match="resourceMemberList" name="group-key" use="concat(resource, '|')"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="sequence">
<xsl:copy>
<xsl:variable name="pos">
<xsl:number count="resourceMemberList[generate-id() = generate-id(key('group-key', concat(resource, '|'))[1])]"/>
</xsl:variable>
<xsl:value-of select="10 * $pos"/>
</xsl:copy>
</xsl:template>
<xsl:template match="resourceMemberList[not(generate-id() = generate-id(key('group-key', concat(resource, '|'))[1]))]"/>
</xsl:stylesheet>