我想问一下如何通过 XSLT 重新编号 LINENUM 和 PARENTID 中的引用。LINENUM 应该按正确的顺序排列。当前有 1、4、5,因为使用了 position(),这是不正确的。如果 LINENUM 是子项且在 PARENTID 中有引用编号,则 LINENUM 可能为空。如果 LINENUM 为空,则不应按顺序计算。此外,可能只有父记录而没有子项。这里有一个简单的 xml 示例。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data>
<line>
<LINENUM>1</LINENUM>
<PARENTID/>
<IDACTION>240730180714572</IDACTION>
</line>
<line>
<LINENUM/>
<PARENTID>1</PARENTID>
<IDACTION></IDACTION>
</line>
<line>
<LINENUM/>
<PARENTID>1</PARENTID>
<IDACTION>240730180714573</IDACTION>
</line>
<line>
<LINENUM>4</LINENUM>
<PARENTID></PARENTID>
<IDACTION>240730180714575</IDACTION>
</line>
<line>
<LINENUM>5</LINENUM>
<PARENTID/>
<IDACTION>240730180714578</IDACTION>
</line>
<line>
<LINENUM/>
<PARENTID>5</PARENTID>
<IDACTION>240730180714579</IDACTION>
</line>
<line>
<LINENUM/>
<PARENTID>5</PARENTID>
<IDACTION>2407301807145712</IDACTION>
</line>
</data>
预期结果如下。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data>
<line>
<LINENUM>1</LINENUM>
<PARENTID/>
<IDACTION>240730180714572</IDACTION>
</line>
<line>
<LINENUM/>
<PARENTID>1</PARENTID>
<IDACTION></IDACTION>
</line>
<line>
<LINENUM/>
<PARENTID>1</PARENTID>
<IDACTION>240730180714573</IDACTION>
</line>
<line>
<LINENUM>2</LINENUM>
<PARENTID></PARENTID>
<IDACTION>240730180714575</IDACTION>
</line>
<line>
<LINENUM>3</LINENUM>
<PARENTID/>
<IDACTION>240730180714578</IDACTION>
</line>
<line>
<LINENUM/>
<PARENTID>3</PARENTID>
<IDACTION>240730180714579</IDACTION>
</line>
<line>
<LINENUM/>
<PARENTID>3</PARENTID>
<IDACTION>2407301807145712</IDACTION>
</line>
</data>
外循环仅处理父
<line>
元素(子元素中包含文本的元素<LINENUM>
),并复制它,根据其在序列中的位置重新编号。然后,内循环复制与<line>
当前父元素匹配的所有下级元素<line>
。在这里,我使用了允许使用其现有的来查找xsl:key
下级元素。<line>
<PARENTID>