xsl変換を書きたいのですが、「カウンター」の部分で立ち往生しています。これは基本的に私がやりたいことです:
入力ファイル:
<?xml version="1.0" encoding="utf-8" ?>
<root>
<Pallets>
<Pallet>
<Line>
<Product>test</Product>
</Line>
<Line>
<Product>test2</Product>
</Line>
</Pallet>
<Pallet>
<Line>
<Product>test_1</Product>
</Line>
<Line>
<Product>test_2</Product>
</Line>
</Pallet>
</Pallets>
</root>
そして、これが私が出力したいものです:
<?xml version="1.0" encoding="utf-8"?>
<Result>
<Pallet>
<ID>2</ID> ==> This is a counter that increments starting from 2
<ID2>1</ID2> ==> Always "1"
<Line>
<ID>3</ID> ==> The counter from above that increments
<ParentID>2</ParentID> ==> PalletID (ID from above the loop)
<Name>test</Name>
</Line>
<Line>
<ID>4</ID> ==> The counter from above that increments
<ParentID>2</ParentID> ==> PalletID
<Name>test2</Name>
</Line>
</Pallet>
<Pallet>
<ID>5</ID> ==> The counter from above that increments
<ID2>1</ID2> ==> Always "1"
<Line>
<ID>6</ID> ==> The counter from above that increments
<ParentID>5</ParentID> ==> PalletID
<Name>test_1</Name>
</Line>
<Line>
<ID>7</ID> ==> The counter from above that increments
<ParentID>5</ParentID> ==> PalletID
<Name>test_2</Name>
</Line>
</Pallet>
</Result>
誰かがこれを手伝ってくれますか?これは私がこれまでに持っているものですが、ご覧のとおり、palletIdのカウンターは正しくありません。2番目のPalletIDは、3ではなくID=5である必要があります。
<?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:output method="xml" indent="yes"/>
<xsl:template match="/">
<Result>
<xsl:for-each select="root/Pallets/Pallet">
<xsl:variable name="counter" select="1" />
<Pallet>
<xsl:variable name="Parentcounter" select="position() + $counter" />
<ID>
<xsl:value-of select="$Parentcounter"/>
</ID>
<ID2>1</ID2>
<xsl:for-each select="Line">
<Line>
<ID>
<xsl:value-of select="$Parentcounter + position()"/>
</ID>
<ParentID>
<xsl:value-of select="$Parentcounter"/>
</ParentID>
<Name>
<xsl:value-of select="Product"/>
</Name>
</Line>
</xsl:for-each>
</Pallet>
</xsl:for-each>
</Result>
</xsl:template>
</xsl:stylesheet>
前もって感謝します。