XSLT文档函数-文件夹层次结构



我正在使用xslt 1.0,并尝试使用xslt文档函数将样式表应用于文件夹层次结构。文件夹结构如下,但我似乎在网上找不到任何关于如何做到这一点的可靠参考资料。

a/
└── b
    └── c
        ├── d
        ├── e
        ├── f

有没有一种方法可以通过文件夹a中的文件(a有到文件夹层次结构中文件名的链接)将样式表应用到文件夹f中的节点、文件中。

更新#2

book01.xml
<?xml version="1.0" encoding="utf-8" ?>
<book location="../collection/book01.xml">
    <chapter>chapter001</chapteer>
</book>
chapter01.xml
<?xml version="1.0" encoding="utf-8" ?>
<chapter location="../collection/book01/chapter01.xml">
    <page>page01</page>
</chapter>
page01.xml
<?xml version="1.0" encoding="utf-8" ?>
<page location="../collection/book01/chapter01/page01.xml">
    <pagenumber>page 1</pagenumber>
    <text>
      page one.
    </text>
</page>
Output
Book Name: Book XX
  Chapter XX
    Page XX
      page xx.

我不确定这是否是在用例上下文中实现您想要实现的目标的可行/合理的方法;但是,您可以保留最初的计划,即使用xsl:for-eachdocument()

例如,假设您有一个带有路径列表的输入文件:

<files>
    <file>book001.xml</file>
    <file>chapter001.xml</file>
</files>

此输入可以合理地用于定义包含所有输入文档的变量并应用模板:

<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    version="1.0">
    <xsl:template match="files">
        <xsl:variable name="docs">
            <docs>
                <xsl:for-each select="file">
                    <xsl:copy-of select="document(.)"/>
                </xsl:for-each>
            </docs>
        </xsl:variable>
        <xsl:apply-templates select="msxsl:node-set($docs)"/>
    </xsl:template>
    <!-- now you can match elements of your xml files -->
</xsl:stylesheet>

请注意,我需要扩展函数来计算节点集。这在xsltproc中是明确可用的,或者您也可以从EXSLT中获得它。

在本例中,我假设输入文件位于book001.xml和chapter001.xml文件的同一文件夹中。

如果链接是相对的,那么它们将根据初始样式表的基本URI进行解析,因此这可能不起作用。在XSLT2.0中,您可以使用resolve-uri函数来实现这一点。


也许您可以实现一个解析uri扩展函数。

许多XSLT2.0处理器实现collection()函数的方式允许您查询文件存储中的目录结构。我不知道XSLT1.0处理器中有任何等效的扩展。

相关内容

  • 没有找到相关文章