相关疑难解决方法(0)

XSLT:如何从某个目录中获取文件名?

在XSLT中是否有一个函数可以接受目录路径并返回其中的所有文件?

我有一个xml文件现在读起来像这样

<filelist>
    <file>fileA.xml</file>
    <file>fileB.xml</file>
</filelist>
Run Code Online (Sandbox Code Playgroud)

现在,有一个名为目录dir,有文件fileX.xml,fileY.xml和一堆在它的其他XML文件.我想将这些文件添加到原始xml文件中,以便我可以获得:

<filelist>
    <file>fileA.xml</file>
    <file>fileB.xml</file>
    <file>fileX.xml</file>
    <file>fileY.xml</file>
    .... <!-- other files -->
</filelist>
Run Code Online (Sandbox Code Playgroud)

有没有一种XSLT方法可以做到这一点?接受dir根目录的东西,能够通过其中的所有文件进行迭代吗?然后我可以打电话给:

<xsl:element name = file >
     <xsl:copy> <!--whatever file name--> <xsl:copy>
</xsl:element>0
Run Code Online (Sandbox Code Playgroud)

[编辑-溶液]

所有的答案都非常有帮助.我最终找到了一个外部解决方案(使用撒克逊).我认为其他人在这里发布我的解决方案可能会有所帮助,尽管这对我自己的情况非常具体.

我使用Ant构建一个java Web应用程序,需要在部署之前翻译一些xml文件.因此,我xslt通过在类路径中添加"saxon9.jar"来完成任务.在我的xsl文件中,我只是做了这样的事情:

<xsl:for-each select="collection('../dir/?select=*.xml')" >
     <xsl:element name='file'>
        <xsl:value-of select="tokenize(document-uri(.), '/')[last()]"/>
     </xsl:element>
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)

xml filesystems xslt file

15
推荐指数
1
解决办法
2万
查看次数

加载XSLT文件时解析相对路径

我需要使用Apache FOP进行XSL转换,我有这样的代码:

//Setup FOP
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);
//Setup Transformer
Source xsltSrc = new StreamSource(new File(xslPath));
Transformer transformer = tFactory.newTransformer(xsltSrc);

//Make sure the XSL transformation's result is piped through to FOP
Result res = new SAXResult(fop.getDefaultHandler());
//Setup input
Source src = new StreamSource(new File(xmlPath));
//Start the transformation and rendering process
transformer.transform(src, res);
Run Code Online (Sandbox Code Playgroud)

这里xslPath是我的XSLT文件的存储路径.

我已经确认它在我只有一个XSLT文件时有效,但在我的项目中,我将事物分成了几个XSLT文件,并用<xsl:import />标签加入它们.使用此配置,我得到一个NullPointerException,因为它不了解存储在XSLT中的所有信息,因为它分布在不同的文件上.

我想知道是否有任何方法可以在Source xsltSrc变量中加载所有这些文件,以便所有XSL信息都可用.

UPDATE

我根据Mads Hansen给出的答案更改了代码,但它仍然无效.我必须在类路径中包含XSLT slt文件,因此我使用ClassLoader加载XSLT文件.我已经检查过URL在执行时有正确的路径url.toExternalForm().这是我的新代码:

ClassLoader cl = this.getClass().getClassLoader();
String systemID = "resources/xslt/myfile.xslt";
InputStream in …
Run Code Online (Sandbox Code Playgroud)

java xslt xsl-fo apache-fop

14
推荐指数
2
解决办法
3万
查看次数

标签 统计

xslt ×2

apache-fop ×1

file ×1

filesystems ×1

java ×1

xml ×1

xsl-fo ×1