XSL使用参数for-each

时间:2017-10-18 08:54:01

标签: java android xml xslt

我正在使用XSL样式表将xml文档转换为Android环境中的html。

<?xml version="1.0" encoding="UTF-8"?>
<list> 
  <project id="Proj02"> 
    <observation id="Proj02_Obs001"> 
    …
    </observation> 
  </project>  
  <project id="Proj01"> 
    <observation id="Proj01_Obs002"> 
    …
    </observation>  
    <observation id="Proj01_Obs001">
      …
    </observation>
  </project> 
</list>

对于我的html文件,我想迭代所有对特定项目的观察。为此,我传递了项目@ id的参数:

transformer.setParameter("projID", "Proj01")

使用xsl文件

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">
    <xsl:template match="/">
        <xsl:param name="projID" />
        <html>
            <body>
                <table>
                    <tr>
                        <th style="text-align:left">ID</th>
                        …
                    </tr>
                    <xsl:for-each select="list/project[@id=$projID]/observation">
                        <tr>
                            <td>
                                <xsl:value-of select="@id" />
                            </td>
                            …
                        </tr>
                    </xsl:for-each>
                </table>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

我没有结果。

我如何修改此行?

<xsl:for-each select="list/project[@id=$projID]/observation">

感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

如果要将外部参数传递给样式表,xsl:param语句必须是xsl:stylesheet的子句

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

    <xsl:param name="projID" />

    <xsl:template match="/">
        <xsl:for-each select="list/project[@id=$projID]/observation">
            <tr>
                <td>
                    <xsl:value-of select="@id" />
                </td>
            </tr>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

该参数是全局的,可以在整个样式表中使用。