我正在使用 xslt 1.0 并尝试使用 XSLT 文档功能将样式表应用到文件夹层次结构。文件夹结构如下,但我似乎无法在网上找到任何关于如何执行此操作的可靠参考。
a/
└── b
└── c
├── d
├── e
├── f
有没有一种方法可以通过文件夹 a 中的文件将样式表应用到文件中的节点、文件夹 f 中(a 具有指向文件夹层次结构中的文件名的链接)。
更新#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-each
and document()
.
例如,假设您有包含路径列表的输入文件:
<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 文件的同一文件夹中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)