在xslt中定义一个列表变量

时间:2014-08-29 08:02:02

标签: java xml xslt

在我的xsl转换中,文件名作为参数传递给样式表。如果它在某个文件列表中,我想做一组特定的操作。现在我正是这样做的;

<xsl:param name="specialFiles" select="'|a.xml|b.xml|'"/>

<xsl:template match="/">
   <xsl:choose>
        <xsl:when test="contains($specialFiles,concat('|',$FILENAME,'|'))" >
            <xsl:apply-templates select="abc" />
        </xsl:when>
        .....
        .....

这可行,但当 specialFiles 列表增长时很快变得混乱。有没有办法将它声明为数组,并快速查找?

编辑:这是我用来转换的代码,我只是将所有内容打印到stdout

    TransformerFactory factory = TransformerFactory.newInstance();
    Source xslt = new StreamSource(new File("1.xsl"));
    Transformer transformer = factory.newTransformer(xslt);

    File xmlFile = new File(args[0]);
    String baseName = xmlFile.getName();   

    transformer.setParameter("FILENAME", baseName); // pass the basename of the file
    transformer.transform(new StreamSource(xmlFile ), new StreamResult(System.out));

编辑2: 我只是设法以稍微不同的方式做到这一点,我在样式表中嵌入了一个xml片段并在其上使用xpath表达式

<specialFiles>
    <name>abcdef.xml</name>
    <name>sadfk32.xml</name>
</specialFiles>

<xsl:template match="/">
   <xsl:choose>       
        <xsl:when test="document('')/xsl:stylesheet/specialFiles/name/text()[contains(.,$fileName)]">
           ....
           ....

1 个答案:

答案 0 :(得分:2)

我使用了样式表中嵌入的xml片段:

<specialFiles>
    <name>abcdef.xml</name>
    <name>sadfk32.xml</name>
</specialFiles>

因此,它上面的一个简单的xpath可用于验证列表中是否存在某个名称,

<xsl:when test="document('')/xsl:stylesheet/specialFiles/name= $filename">