在我的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)]">
....
....
答案 0 :(得分:2)
我使用了样式表中嵌入的xml片段:
<specialFiles>
<name>abcdef.xml</name>
<name>sadfk32.xml</name>
</specialFiles>
因此,它上面的一个简单的xpath可用于验证列表中是否存在某个名称,
<xsl:when test="document('')/xsl:stylesheet/specialFiles/name= $filename">