如何使用xslt增加值


I have the following XML that has been generated from a Spreadsheet:
<DocumentElement>
  <Sheet1>
    <FIELD_1>100</FIELD_1>
    <FIELD_2>TWO</FIELD_2>
    <FIELD_3>110ST20</FIELD_3>
  </Sheet1>
  <Sheet1>
    <FIELD_1>100</FIELD_1>
    <FIELD_2>TWO</FIELD_2>
    <FIELD_3>110ST20</FIELD_3>
  </Sheet1>
  <Sheet1>
    <FIELD_1>100</FIELD_1>
    <FIELD_2>TWO</FIELD_2>
    <FIELD_3>11CST32</FIELD_3>
  </Sheet1>
  <Sheet1>
    <FIELD_1>100</FIELD_1>
    <FIELD_2>TWO</FIELD_2>
    <FIELD_3>11CST32</FIELD_3>
  </Sheet1>
  <Sheet1>
    <FIELD_1>100</FIELD_1>
    <FIELD_2>TWO</FIELD_2>
    <FIELD_3>11CST32</FIELD_3>
  </Sheet1>
</DocumentElement>

注意前两个元素中的FIELD_3具有相同的编号(110ST20),最后3个元素中的FIELD_3也具有相同的编号(11CST32)。FIELD_3可能重复的次数是不可预测的。

我希望通过添加01、02等后缀来使数字唯一——直到数字重复的次数,这样最终的结果应该看起来像这样:

<details Number="100" Position="TWO" Value="110ST2001">
<details Number="100" Position="TWO" Value="110ST2002">
<details Number="100" Position="TWO" Value="11CST3201">
<details Number="100" Position="TWO" Value="11CST3202">
<details Number="100" Position="TWO" Value="11CST3203">

下面是我的xslt:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="msxsl">
<xsl:strip-space elements="*" />
<xsl:output method="xml" indent="yes"/>
<xsl:template match="DocumentElement">
<DocumentElement>
  <xsl:for-each select ="/DocumentElement/Sheet1">
    <details>
        <xsl:attribute name="Number" >
          <xsl:value-of select="FIELD_1"/>
        </xsl:attribute>
      <xsl:attribute name="Position" >
        <xsl:value-of select="FIELD_2"/>
      </xsl:attribute>
      <xsl:attribute name="Value" >
        <xsl:value-of select="FIELD_3"/>
      </xsl:attribute>          
    </details>
  </xsl:for-each>
</DocumentElement>
</xsl:template>
</xsl:stylesheet>

和我的结果如下:

<?xml version="1.0"?>
<DocumentElement>
  <details Value="110ST20" Position="TWO" Number="100"/>
  <details Value="110ST20" Position="TWO" Number="100"/>
  <details Value="11CST32" Position="TWO" Number="100"/>
  <details Value="11CST32" Position="TWO" Number="100"/>
  <details Value="11CST32" Position="TWO" Number="100"/>
</DocumentElement>

我如何使用xslt做到这一点?

提前感谢您的协助!

您需要首先使用Muenchian分组方法对记录进行分组。然后,您可以按顺序编号每个组的成员,使用他们在组中的位置:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:key name="sheet-by-f3" match="Sheet1" use="FIELD_3" />
<xsl:template match="/">
    <DocumentElement>
        <xsl:for-each select="DocumentElement/Sheet1[count(. | key('sheet-by-f3', FIELD_3)[1]) = 1]">
            <xsl:for-each select="key('sheet-by-f3', FIELD_3)">
                <details Number="{FIELD_1}" Position="{FIELD_2}">   
                    <xsl:attribute name="Value" >
                        <xsl:value-of select="FIELD_3"/>
                        <xsl:value-of select="format-number(position(), '00')"/>
                    </xsl:attribute>          
                </details>
            </xsl:for-each>
        </xsl:for-each>
    </DocumentElement>
</xsl:template>
</xsl:stylesheet>

相关内容

  • 没有找到相关文章

最新更新