我有一个看起来像这样的 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],但无论出于何种原因,它都只输出它们。我尝试在选择中使用 columnWidth[1] ,它按我的预期输出 50 。columnWidth[2] 输出 100。我在这里真的很困惑。使用previous-sibling 给出了相同的结果。我的模板匹配有问题吗?
不幸的是,更改 xml 格式不是一种选择。