当前位置: 首页 > 知识库问答 >
问题:

从命令行到带有共享参考文档的文件目录的Saxon XSLT转换

郎意
2023-03-14

我正在从命令行运行saxon 9HE来转换xml文件目录。xslt加载两个文档作为共享参考文档以查找公共信息,即一个是公司列表,用于验证公司并返回公司信息以显示在生成的html页面上,另一个是零件列表,用于验证零件并返回零件信息以显示在页面上。这些文件在xml目录中可以有多个版本,所以我得到了它们的一个集合,并使用最后一个版本,这是最近的一个。

我想知道的是在命令行转换期间,这些共享文档是为所有输入xml文件加载/缓存到内存中,还是为正在处理的目录中的每个输入xml文件重新加载?

xml样本

<companies>
    <company code="123"/>
    <address>
    <street>1 MAIN STREET</street>
    <city>City</city>
    <state>ST</state>
    <country>USA</country>
    <phoneNumber>800-123-4567</phoneNumber>
    </address>
    </company>
</companies>

样本xslt

<?xml version="1.0"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
           xmlns="http://www.w3.org/1999/xhtml">
   <xsl:output method="xhtml" xpath-default-namespace="http://www.w3.org/1999/xhtml" 
           doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
           doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" 
           indent="yes" 
           omit-xml-declaration="yes"/>

<xsl:param name="currentDir">false</xsl:param>
<xsl:variable name="companyCollection" select="collection(iri-to-uri(concat  ('file:///',$currentDir, '/xml/', '?select=company_, '*.(xml|XML)')))[last()]"/> 
<xsl:variable name="companyDoc" select="$companyCollection//companies"/>  
<xsl:key name="companyKey" match="company" use="company/@mcode"/> 

如果为每个单独的转换加载它们,那么在处理xml文件目录时,我如何让它们只加载一次?如果不能从命令行执行,那么可以从java执行吗?

或者最好/最快的方法是提前输入文件名,并在document()命令中硬编码,以防止加载每个输入xml文件?

<xsl:variable name="companyDoc" select="document(company.xml)/companies"/>

我们正在处理目录中成千上万的xml文件,并希望使其尽可能高效。

谢谢你!

共有1个答案

贾建茗
2023-03-14

当您从命令行处理一个目录时,每个输入文件都使用一个新的Transformer进行处理,因此不需要缓存源文档。

如果查找文件是静态已知的(doc('lookup.xml')),那么您可以通过添加选项--preEvalateDockeytion: on来强制编译时加载文档。由于样式表只编译一次,这将产生只加载一次查找文档的效果。

一般来说,如果从Java应用程序(使用s9api)而不是从命令行运行作业,那么对执行的控制就会大得多。

 类似资料:
  • Kubernetes官方网站 Kubernetes文档 Kubernetes course CNCF项目贡献统计 Kubernetes项目贡献统计 Kubernetes github metrics Kubernetes submit queue Github public data Kubernetes the hard way Kubernetes Bootcamp Design patter

  • 参考文档 Dockerfie 官方文档:https://docs.docker.com/engine/reference/builder/ Dockerfile 最佳实践文档:https://docs.docker.com/develop/develop-images/dockerfile_best-practices/ Docker 官方镜像 Dockerfile:https://github.

  • 元素 元素最重要的属性就是base-package,用来定义查找Spring Data repository接口时扫描包的路径。 Table 3.属性 名称 描述 base-package 定义查找所有继承*Repository的repository接口时所扫描包的路径,该路径下所有的包都会被扫描。允许使用通配符 repository-impl-postfix 定义自定义repository实现类

  • 我有一个目录,它是在执行应用程序后创建的。在使用应用程序的过程中,它充满了一些图片,这些图片是ComboBox的ItemsSource。在关闭应用程序之前,我试图通过设置new()或NULL来清除ItemsSource并删除该目录。如果目录为空,则会正常删除。但除此之外——什么都没有发生,也没有例外。我做错了什么? 创建目录并将路径值分配给“FeedBackScreenshotsPath” 删除

  • 元素 允许开发者通过Spring Data repository框架填充数据存储。 Table 4.Attributes(属性) 名称 描述 locations 定义包含用来读取填充对象的文件的位置

  • 浏览下面的网页,了解更多 CityBuilder 相关信息。 常用坐标系 常用在线工具 常用地理底图 常见问题