我有一组名为x1.xml
,x2.xml
的文件,最多约x50000.xml
。
我想在所有这些文件中搜索字符串,例如。 foo
并返回其文件包含字符串foo
的文件名集,例如。
<file>x12.xml<file>
<file>x511.xml<file>
我可以将所有文件名的列表传递到XSLT并使用document($uri)
单独访问每个文件,但是在XSLT 1.0中有一些glob
类功能,我可以在其中指定模式,例如。 document('x*.xml')
?或者还有其他方式吗?
修改...
我正在使用PHP的XSL 1.0处理器libxslt
。
答案 0 :(得分:2)
您可以生成一个XML文件,其中包含对各个XML文件的external entity个引用:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE doc [
<!ENTITY fileContent1 SYSTEM "x1.xml">
<!ENTITY fileContent2 SYSTEM "x2.xml">
<!ENTITY fileContent3 SYSTEM "x2.xml">
]>
<doc>
<file name="x1.xml">
&fileContent1;
</file>
<file name="x2.xml">
&fileContent2;
</file>
<file name="x3.xml">
&fileContent3;
</file>
</doc>
然后转换XML文件,该文件将包含外部实体引用引用的XML文件的所有内容。
如上面那样对XML实例执行下面的样式表会产生一个逗号分隔的列表,其中包含所有包含“foo”的文件名:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:param name="find-value" select="'foo'"/>
<xsl:template match="/">
<xsl:apply-templates select="doc/file[contains(., $find-value)]"/>
</xsl:template>
<xsl:template match="file">
<xsl:value-of select="@name"/>
<xsl:if test="position()!=last()">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
是的,您可以在XSLT文件中使用VBScript的JavaScript。不同的XSLT处理器支持不同的脚本语言。 以下是一个示例,说明如何合并用户定义的VBScript functions in XSL/T