根据输入中元素的出现增加输出中的元素值

Increment the element value in output based on the occurrence of an element in input

你好,我正在尝试编写 xslt,当给出下面的类似输入时,我需要获得所需的输出。如果您观察到输出有一个基于 xml 中元素出现的 id。到目前为止,在我的 xslt 中,我是根据职位来做的。但它会中断并重新开始每个来自输入 XML 的计数。这能实现吗

更新:

正在向输入添加更多详细信息。如您所见,我在级别下添加了它,并且应该在其所有相应数据上填充它

输入XML

<lines>
    <line>
      <po-num>text1</ponum>
        <accountings>
            <accounting>
                <account>
                    <seg1>value1</seg1>
                </account>
            </accounting>
            <accounting>
                <account>
                    <seg1>value2</seg1>
                </account>
            </accounting>
        </accountings>
    </line>
    <line>
       <po-num>text2</ponum>
        <accountings>
            <accounting>
                <account>
                    <seg1>value3</seg1>
                </account>
            </accounting>
        </accountings>
    </line>
    <line>
       <po-num>text3</ponum>
        <account>
            <seg1>value4</seg1>
        </account>
    </line>
</lines>

期望输出XML

<Item>
    <id>1</id>
    <po-num>text1</ponum>
    <seg>value1</seg>
</Item>
<Item>
    <id>2</id>
    <po-num>text1</ponum>
    <seg>value2</seg>
</Item>
<Item>
    <id>3</id>
    <po-num>text2</ponum>
    <seg>value3</seg>
</Item>
<Item>
    <id>4</id>
     <po-num>text3</ponum>
    <seg>value4</seg>
</Item>

XSLT 我正在使用 Rupesh 提供的 xslt。

<?xml version="2.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"></xsl:output>
<xsl:template match = "/">

    <xsl:for-each select="//account">
        <item>
            <id><xsl:value-of select="position()"/></id>
             <po-num><xsl:value-of select="../../../*:po-num"/></po-num>
            <seg><xsl:value-of select="./*:seg1"></xsl:value-of></seg>
        </item>
    </xsl:for-each>
</xsl:template>
</xsl:stylesheet>

试试这个:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"></xsl:output>
    <xsl:template match = "/">

        <xsl:for-each select="//seg1">
            <item>
                <id><xsl:value-of select="position()"/></id>
                <seg><xsl:value-of select="."></xsl:value-of></seg>
            </item>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

您可以在 http://xsltransform.hikmatu.com/jyyiVhm

看到转换