次の XML ファイルがあります。
<Record
Name="My_Record"
<Fields
StartingBit="0"
Size="3"
Name="Field_1">
</Fields>
<Fields
StartingBit="1"
Size="5"
Name="Field_2">
</Fields>
<Fields
StartingBit="2"
Size="8"
Name="Field_3">
</Fields>
<Fields
StartingBit="3"
Size="4"
Name="Field_4"
</Fields>
</Record>
そして、XSLT を使用して、前のノードの @StartingBit + @Size から @StartingBit 属性を適切に更新したいと思います。これは、現在のノードの @StartingBit 値になります。結果の XML は次のようになります。
<Record
Name="My_Record"
<Fields
StartingBit="0"
Size="3"
Name="Field_1">
</Fields>
<Fields
StartingBit="3"
Size="5"
Name="Field_2">
</Fields>
<Fields
StartingBit="8"
Size="8"
Name="Field_3">
</Fields>
<Fields
StartingBit="16"
Size="4"
Name="Field_4"
</Fields>
</Record>
これまでのところ、XSLT に対する私の最新の試みは次のとおりです。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match ="Fields/@StartingBit">
<xsl:value-of select ="(preceding-sibling::Fields[1]/@StartingBit + preceding-sibling::Fields[1]/@Size)"/>
</xsl:template>
</xsl:stylesheet>
上記の変換は、私が望むものを生成しません - 基本的に @StartingBit は変更されません。ノード ナビゲーションに習熟していないため、希望どおりの結果が得られません。変換を手伝ってくれる人はいますか? 前もって感謝します。
- ローレンツ