XSLT 转换子目录中的多个文件

2023-11-24

我创建了一个可以转换单个 XML 文件的 XSLT 文件。但是,我有数百个包含多个 xml 文件的目录。 XSLT 有没有办法转换所有这些文件。我正在使用集合功能来获取所有文件的列表。但是,现在不确定如何应用转换。

这是我的示例 XSLT 文件。基本上,我想循环遍历所有 xml 文件并将模板表应用于单个文件。所有这些转换的输出都需要位于一个平面文本文件中。

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:foo="http://whatever">

<xsl:output method="text" encoding="ISO-8859-1"/>
    <xsl:template name="process">
        <xsl:variable name="files" select="collection('file:///C:/files/testResults?select=*.xml;recurse=yes')"/>
        <xsl:for-each select="$files">
            <xsl:if test="(not(contains(document-uri(.), 'SuiteSetUp'))) and (not(contains(document-uri(.), 'SuiteTearDown')))">
                <xsl:value-of select="tokenize(document-uri(.), '/')[last()]"></xsl:value-of>
                <xsl:apply-templates select="/testResults/result/tables/table[14]">
                    <xsl:with-param name="title" select="/testResults/rootPath"></xsl:with-param>
                </xsl:apply-templates>
                <xsl:apply-templates select="/testResults/result/tables/table[15]"/>
            </xsl:if>
        </xsl:for-each>
    </xsl:template>

    <xsl:template match="table">
    <xsl:param name="testName"></xsl:param>
        <xsl:for-each select="row">
            <xsl:if test="position() > 2">
                <xsl:variable name="choices" select="col[2]"></xsl:variable>
                <xsl:if test="contains($choices, 'fail')">
                    <xsl:value-of  select="$testName"></xsl:value-of>
                    <xsl:text>|</xsl:text>
                    <xsl:value-of select="col[1]"></xsl:value-of>
                    <xsl:text>|</xsl:text>
                    <xsl:value-of select="foo:getCorrectChoices(col[2])"></xsl:value-of>
                    <xsl:text>|</xsl:text>
                    <xsl:value-of select="foo:getExpectedChoices(col[2])"></xsl:value-of>
                    <xsl:text>|</xsl:text>
                    <xsl:call-template name="NewLine"/>
                </xsl:if>
            </xsl:if>
        </xsl:for-each>
    </xsl:template>

    <xsl:template name="NewLine">
        <xsl:text>&#xA;</xsl:text>
    </xsl:template>

    <xsl:function name="foo:getCorrectChoices">
        <xsl:param name="content"></xsl:param>
        <xsl:analyze-string select="$content" regex="\[(\[.+?\])\] fail">
            <xsl:matching-substring>
                <xsl:value-of select="regex-group(1)"></xsl:value-of>
            </xsl:matching-substring>
        </xsl:analyze-string>
    </xsl:function>
    <xsl:function name="foo:getExpectedChoices">
        <xsl:param name="content"></xsl:param>
        <xsl:analyze-string select="$content" regex="fail\(expected \[(\[.+?\])\]">
            <xsl:matching-substring>
                <xsl:value-of select="regex-group(1)"></xsl:value-of>
            </xsl:matching-substring>
        </xsl:analyze-string>
    </xsl:function>
</xsl:stylesheet>

这可能是最简单的示例,如何处理文件系统子树中的所有 xml 文件(使用collection()函数在 Saxon 中实现):

<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="node()|@*" mode="inFile">
     <xsl:copy>
       <xsl:apply-templates mode="inFile" select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="/">
   <xsl:apply-templates mode="inFile" select=
   "collection('file:///C:/temp?select=*.xml;recurse=yes')"/>
 </xsl:template>
</xsl:stylesheet>

当应用于任何 XML 文档时(未使用、忽略),此转换将身份规则应用于任何包含在其中的每个 XML 文档*.xml files in the C:/Temp文件系统的子树。

为了进行更有意义的处理,需要覆盖身份模板——在inFile mode.

根据您的具体情况,我相信您可以简单地替换:

            <xsl:apply-templates select="/testResults/result/tables/table[14]">     

with

            <xsl:apply-templates select="./testResults/result/tables/table[14]">    

这会将所需的模板应用于从当前(文档)节点选择的节点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XSLT 转换子目录中的多个文件 的相关文章

随机推荐

  • Sinatra 如何定义和调用 get 方法?

    我很好奇这东西是如何工作的 在需要 sinatra 之后 然后我可以在顶级范围内调用 get 深入研究源代码后 我发现了这个 get 结构 module Sinatra class lt lt self def get end end en
  • strstr 的纯字节版本?

    是否有一个 strstr 版本可以在可能包含空字符的固定长度内存上工作 我可以这样表达我的问题 strncpy 与 memcpy 的关系与 strstr 的关系相同 memmem 不幸的是它是 GNU 特定的而不是标准 C 但是 它是开源的
  • 通过名称模糊匹配创建唯一 ID(通过使用 R 的 agrep)

    使用 R 我尝试匹配按年份和城市构建的数据集中的人名 由于一些拼写错误 不可能进行精确匹配 因此我尝试使用 agrep 来模糊匹配名称 数据集的样本块的结构如下 df lt data frame matrix c 1200013 12000
  • 你能用 Go 在内存中“固定”一个对象吗?

    我有一个 Go 对象 我希望其在内存中的地址保持不变 在 C 中 我们可以固定对象在内存中的位置 Go 有办法做到这一点吗 您保留引用的对象不会移动 没有句柄或间接寻址 您获得的地址是永久的 From 文档 请注意 与 C 不同 返回 a
  • 有什么更快的方法可以找到“幸运三元组”的数量?

    我正在研究一个代码挑战问题 寻找幸运三元组 幸运三重 被定义为 在列表中lst 对于三元组的任意组合 lst i lst j lst k where i lt j lt k where lst i divides lst j and lst
  • 具有 ECDHE 密钥和证书的服务器无法正常工作

    我使用下面的 server c 源代码 我生成了 sinful host cert pem sinful host key 如此处所述 椭圆曲线 CA 指南 运行程序时出现以下错误 140722397161136 错误 10071065 椭
  • 在 ggplot 中展开分类 x 轴

    我不知道如何使用expand within scale x discrete 扩展分类 x 轴 以便将标签放置在点的右侧不会脱离绘图 我知道如果 x 是数字 我可以简单地调整 x 的最大限制 以便所有点都向左移动 但是 我无法弄清楚如何使用
  • SQL Server 导入向导将 NULL 视为文字字符串“NULL”

    当我尝试导入 csv以逗号分隔的平面文件转换为Microsoft SQL server 2008R2 64 bit instance for string列aNULL原始数据变成文字字符串 NULL 并在一个numeric列我收到导入错误
  • 内存警告 UIImagepickerController IOS 7

    任何人都可以帮助我解决这个问题吗 我对 Objective C 和 iOS 有点陌生 我一直在研究它 但我不知道如何解决这个问题 我的应用程序非常简单 它只启动相机拍照并通过电子邮件将它们发送到我们的服务器 这段代码在 iOS6 中运行得很
  • jQuery Mobile 导航还是更改页面?

    随着 jQuery Mobile 1 3 的到来 navigate 已添加功能 我听说这是更改页面的推荐方法 而且它们似乎解决了页面之间传输数据的问题 问题是 既然它已经被简化了 我如何访问其他选项changePage提供 我真的很想使用的
  • mongodb 归档格式是什么?

    我已经使用它们的存档选项备份了一些 mongoDB 但我不能简单地解压它们 当我执行一些步骤来解压缩数据时 存档看起来像是一个大文件中的整个数据库 我想获取各个收藏的文件 有没有办法做到这一点 tar xvf valk archive ta
  • 如何将网址中的双斜杠/多斜杠替换为单斜杠

    我有一个像这样的网址 http 127 0 0 1 7000 test test index html 预期输出 http 127 0 0 1 7000 test test index html 我使用这个正则表达式 http 2 输出是
  • 我的 Rails Javascript 清单文件既不编译也不包含任何所需的文件

    我看过一些与此类似的帖子 但没有解决方案 所以我想我会提出一个更有记录的问题 我的问题清单文件中的 JS 不包含或编译任何 JS 当在本地运行我的服务器并打开 JS 文件时 我看不到任何编译内容 只有标准的 application js 清
  • 在 Objective-C 中,在每个类中导入相同的头文件会使编译时间更长吗?

    我是 Objective C iOS 编程的初学者 我想制作一个头文件 其中包含我在项目中使用的所有类头 并在每个类头文件中导入头文件 就像这个问题 在同一个头文件中包含多个类 但这种方法会增加编译时间吗 或者还有什么其他的缺点吗 请告诉我
  • func_num_args、func_get_arg 和 func_get_args 从 php 5.2 到 5.3 的行为差异

    我看过PHP手册 但我不明白 PHP 早期版本和更高版本之间的行为差 异 我不明白这个说法 由于该函数依赖于当前作用域来确定参数详细信息 因此在 5 3 0 之前的版本中不能将其用作函数参数 如果必须传递该值 则应将结果分配给一个变量 然后
  • Python/Tkinter:ModuleNotFoundError:没有名为“_tkinter”的模块

    这是我在 StackOverflow 上发表的第一篇文章 我会尽力使其尽可能正确和完整 如果您有任何改进我的文章的建议 我会很乐意接受 我在运行使用 Tkinter 的 Python 编写的代码时遇到问题 我将尝试详细描述我的操作 以便于识
  • 将 HTML 转义字符解码回 C# 中的正常字符串

    我的问题很简单 我在网上搜索了一下 但找不到一种快速方法来对字符串中的 HTML 文本进行转义 例如 lt gt amp 应以字符串形式返回 有没有一种快速的方法 或者我必须编写自己的 unescaper use System Web Ht
  • 在Android应用程序中获取用户的位置权限[重复]

    这个问题在这里已经有答案了 I m trying to get the users actual location with the typicaly permissions box like this 如果有人知道如何制作 请回答 在运行
  • 无法更新 UITableViewCell 中 UI 对象的框架

    我有一个子类 UITableViewCell 我需要动态更改 UILabel 的框架 这是我所做的 UITableViewCell tableView UITableView tableView cellForRowAtIndexPath
  • XSLT 转换子目录中的多个文件

    我创建了一个可以转换单个 XML 文件的 XSLT 文件 但是 我有数百个包含多个 xml 文件的目录 XSLT 有没有办法转换所有这些文件 我正在使用集合功能来获取所有文件的列表 但是 现在不确定如何应用转换 这是我的示例 XSLT 文件