次のようなxmlファイルがあります。
<section>
<title> title of section </title>
<table>
<title> title of table</title>
<tableData columns = 2>
<column width ="50"/>
<column width ="100"/>
<tableHead>
<row>
<entry>column 1</entry>
</row>
<row>
<entry>column 2</entry>
</row>
</tableHead>
<tableBody>
<row>
<entry>text</entry>
<entry>abc</entry>
</row>
<row>
<entry>text</entry>
<entry>dbe</entry>
</row>
<row>
<entry>text</entry>
<entry>fgh</entry>
</row>
</tableBody>
</table>
</section>
tableHead/row/entry の各エントリを処理し、columnWidth も含む何らかの形式で出力する必要があります。したがって、出力は次のようになります {"name":"column 1", "width":"50px"},{"name":"column 2", "width":"100px"}
私の変換は次のようになります
<xsl:template match="//table/tableHead/row/entry">
<xsl:text>{"name": "</xsl:text><xsl:value-of select"."/>
<xsl:text>", "width":"</xsl:text>
<xsl:call-template name="get_column_width">
<xsl:with-param name ="rowNum">
<xsl:value-of sellect"position()"/>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name ="get_column_width">
<xsl:param-name="rowNum">
<xsl:value-of select="../../../columnWidth[$rowNum]/@width"/>
<xsl:text>px"}</xsl:text>
</xsl:template>
奇妙なことに、これは {"name":"column 1", "width":"50 100px"},{"name":"column 2", "width":"50 100px"} を生成します
ただし、rowNum パラメーターのみを出力すると、期待どおりの結果が得られます。
{"名前":"列 1", "幅":1px"},{"名前":"列 2", "幅":"2px"}
したがって、rowNum は 1 と 2 であるため、select ステートメントは columnWidth[1] と columnWidth[2] を使用しますが、何らかの理由で両方を出力するだけです。select で columnWidth[1] を使用してみましたが、予想どおり 50 が出力されます。columnWidth[2] は 100 を出力します。ここで本当に混乱しています。先行兄弟を使用しても同じ結果が得られました。テンプレートのマッチングに何か問題がありますか?
残念ながら、xml 形式を変更することはできません。