XML:
<?xml version="1.0" encoding="utf-8"?>
<Projects>
<Project GUID="K9">
<Name>Range</Name>
<WBSs>
<WBS GUID="2">
<Name>Site</Name>
<ParentWBS/>
<ProjectGUID>K9</ProjectGUID>
<ObjectId>99040</ObjectId>
<Activities/>
<WBSs>
<WBS GUID="1">
<Name>West</Name>
<ParentWBS>2</ParentWBS>
<ProjectGUID>K9</ProjectGUID>
<ObjectId>99046</ObjectId>
<Activities>
<Activity GUID="A100">
<Name>Task</Name>
<ProjectGUID>K17</ProjectGUID>
<WBSCode>1</WBSCode>
</Activity>
</Activities>
</WBS>
<WBS GUID="2">
<Name>South</Name>
<ParentWBS>2</ParentWBS>
<ProjectGUID>K9</ProjectGUID>
<ObjectId>99047</ObjectId>
<Activities>
<Activity GUID="A200">
<Name>Task 2</Name>
</Activity>
</Activities>
</WBS>
<WBS GUID="3">
<Name>North</Name>
<ParentWBS>2</ParentWBS>
<ProjectGUID>K9</ProjectGUID>
<ObjectId>99048</ObjectId>
<Activities/>
</WBS>
</WBSs>
</WBS>
</WBSs>
<Activities/>
</Project>
</Projects>
这是我的当前输出:
<OBJECTID>99046</OBJECTID >
<ACTIVITY>0010</ACTIVITY>
<OBJECTID>99047</OBJECTID >
<ACTIVITY>0020</ACTIVITY>
所需输出:
<OBJECTID>99046</OBJECTID >
<ACTIVITY>0010</ACTIVITY>
<OBJECTID>99047</OBJECTID >
<ACTIVITY>0010</ACTIVITY>
当我有现有的Activity和OBJECTID时,前两个When子句可以正常工作。当不存在
ObjectID或ObjectID在第3次更改时。我需要的是从0010开始,递增10,直到$ObjectID发生变化,然后再次从0010开始,依此类推。我的背景是程序编程,所以仍然习惯于函数式的做事方式和不改变变量的限制。
提前谢谢。
以下是相关的XSLT代码:
<ACTIVITY>
<!-- count($ExistingActivity) = 1 -> ObjectId & Activity Id exist, increment $LastObjectIdActivity/ACTIVITY
count($ExistingObjectId) = 1 -> ObjectId exists, increment $LastObjectId/ACTIVITY
count($ExistingObjectId) = 0 -> $ObjectId start at 0010 and keep incrementing until ObjectId change.
-->
<xsl:variable name="incr" select="10"/>
<xsl:choose>
<xsl:when test="count($ExistingActivity) = 1"> <!-- Exact match of ObjectId & Activity -->
<!-- Get last existing ObjectId activity -->
<xsl:variable name="temp" select="$LastObjectIdActivity/ACTIVITY"/>
<xsl:variable name="Oper" select="format-number($temp, '0000')"/>
<xsl:value-of select="$Oper"/>
</xsl:when>
<xsl:when test="count($ExistingObjectId) = 1"> <!-- Activity not found, But ObjectId exists-->
<!-- Get last existing ObjectId activity -->
<xsl:variable name="temp" select="$LastObjectId/ACTIVITY + $incr"/>
<xsl:variable name="Oper" select="format-number($temp, '0000')"/>
<xsl:value-of select="$Oper"/>
</xsl:when>
<xsl:when test="count($ExistingObjectId) = 0"> <!-- No Existing ObjectId -->
<xsl:variable name="pos" select="(position() * 10)"/>
<xsl:variable name="NextOper" select="format-number($pos, '0000')"/> <!-- Start Activity at 0010 reset on new ObjectId-->
<xsl:value-of select="$NextOper"/>
<!-- $NextOper should be incremented by 10 -->
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
</ACTIVITY>