XSLT - 作为一系列节点的参数

2024-03-07

我的目标是将多个文件的名称传递到 XSLT 中并使用document($myFile)。我试图使用 saxon 引擎在命令行上传递参数,但它不断抛出错误。

我知道我可以写出一个清单文件,对其进行处理,然后在完成后将其删除。但这似乎需要大量额外工作,可能会进一步减慢速度。

当参数像这样硬编码时,XSLT 就会起作用......

<xsl:param name="PnewArticles" as="element()*">
    <file-name>XMLFile.XML</file-name>
    <file-name>XMLFile2.XML</file-name>
</xsl:param>

从命令行分配如下所示:

XSLT -s:Source.XML -o:outfileTest.xml -xsl:"test.xsl" newArticles='<file-name>XMLFile.XML</file-name>'

<!-- xslt param changed to this: -->
<xsl:param name="newArticles"/>

但是,它似乎将其读取为字符串值。打印出来后看起来像这样(当然,这是失败的):

'&lt;file-name&gt;XMLFile.XML&lt;/file-name&gt;'

我在命令行上尝试了各种引号组合(单/双),但无济于事。还尝试添加as="element()*"与硬编码示例一样 - 但随后它强烈抱怨......

  XPTY0004: Required item type of value of variable $newArticles is node(); suplied value has item type xs:untypedAtomic

有任何想法吗?好像是这样的should有可能。


示例文件

XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
xmlns:oasis="//OASIS//DTD XML Exchange Table Model 19990315//EN"
xmlns:mml="http://www.w3.org/1998/Math/MathML"     xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
exclude-result-prefixes="mml oasis dc content xsi">

<xsl:output method="xml" encoding="utf8"/>
<xsl:param name="newArticles"/>

<!-- When these are used they work -- the extra letter in front is just to silence -->
<xsl:param name="PnewArticles" as="element()*">
    <file-name>XMLFile.XML</file-name>
</xsl:param>
<xsl:variable name="VnewArticles" as="element()*">
    <file-name>XMLFile.XML</file-name>
</xsl:variable>

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

<xsl:template match="skipDays">
    <xsl:copy-of select="."/>
    <myParam>
        <xsl:value-of select="$newArticles"/>
    </myParam>
    <xsl:apply-templates select="document($newArticles)" mode="addArticle"/>
</xsl:template>

<xsl:template match="front" mode="addArticle">
    <item>
        <xsl:text>NEW XML, Vol. </xsl:text>
        <xsl:value-of select="volume"/>
        <xsl:text>, No. </xsl:text>
        <xsl:value-of select="issue"/>
    </item>
</xsl:template>

<xsl:template match="body" mode="addArticle"/>
</xsl:stylesheet>

源文件

<?xml version="1.0"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<language>en-us</language>
<skipDays>
 <day>Saturday</day>
 <day>Sunday</day>
</skipDays>
</channel>
</rss>

XMLFile

<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE article>
<article xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" dtd-version="2.2" xml:lang="EN" article-type="abstract">
  <front>
    <volume>17</volume>
    <issue>1</issue>
  </front>
  <body>
    <sec>
      <title>This is my Title</title>
      <p>This is a Paragraph</p>
    </sec>
  </body>
 </article>

尝试了 5 分钟,我只能将 XML 放入一个单独的文件中,然后在参数中引用该文件(通过添加+命令行上的参数名称)。

注意:XML 必须格式良好,因此如果您想要多个file-name元素,您必须将它们包装在根元素中,例如:

<param>
    <file-name>XMLFile.XML</file-name>
    <file-name>other</file-name>
</param>

(我参考了http://www.saxonica.com/documentation/using-xsl/commandline.html http://www.saxonica.com/documentation/using-xsl/commandline.html)

Example:

XSLT 2.0

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:param name="newArticles"/>

    <xsl:template match="/*">
        <test>
            <xsl:copy-of select="$newArticles"/>            
        </test>
    </xsl:template>

</xsl:stylesheet>

命令行(视窗)

java -cp "C:\apps\saxon\saxon9he.jar" net.sf.saxon.Transform ^
-s:"so_test.xsl" ^
-xsl:"so_test.xsl" ^
+newArticles="newArticlesParam.xml"

newArticlesParam.xml

<file-name>XMLFile.XML</file-name>

Output

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

XSLT - 作为一系列节点的参数 的相关文章

随机推荐

  • 将动态数组传递给 C 中的函数

    我正在尝试创建一个函数 该函数将数组作为参数 向其添加值 如果需要 增加其大小 并返回项目的计数 到目前为止我有 int main int argc char argv int mSize 10 ent a mSize int n n ad
  • 无法使用 py2exe 以“Domain\ComputerName”pyodbc 身份登录

    好的 我有一个连接到 mssql 数据库的脚本 我需要作为我已经完成的服务运行 但是当我将它作为服务运行时 它会覆盖我在使用以下命令连接到数据库时输入的凭据 广告计算机帐户 当我单独运行它而不是作为服务运行时 它运行得非常完美 我的连接字符
  • PDF 和 MFMailComposeViewController

    编写允许用户生成 pdf 并发送的应用程序部分 似乎工作正常 发送的 PDF 在 MAC 上可以正常打开 但在 iPhone 上它只是不断加载并且永远不会打开 在 Ray Wenderlich 教程的帮助下创建了一个 pdf 文档 并通过带
  • Delphi RTTI:获取属性的类

    使用Delphi 2010和RTTI 我知道如何获取对象的类类型以及如何获取 设置对象属性的值和类型 但是如何确定属性来自继承链中的哪个类 我想以不同于主类的方式使用基类的属性 考虑这段代码 TClassBase class TObject
  • 使用 SQL 对列表排序还是作为集合排序?

    我的数据库中有一些带有日期的条目 什么是最好的 用sql语句获取它们并应用order by 使用 sql 获取列表 并在应用程序中对它们进行排序collection sort or so Thanks 这是一个非常广泛的问题 很难回答 这在
  • Rust 进程使用 GitHub 操作失败,退出代码为 101

    该代码在我的本地计算机上运行良好并且没有给出任何错误 但是当我推送到 GitHub 时 构建失败了 这是我的工作流程文件的块 runs on matrix platform steps name Checkout Repository us
  • Delphi 多索引通用列表

    我正在寻找一种 TList 后代 它可以让我添加一个或多个索引 并让我通过这些索引进行搜索和查看 30分钟的谷歌搜索让我一无所获 以前肯定需要这个 我的意思是 有多少次您有一个内存索引集合 然后需要以不同的顺序显示它 Thanks AJ 你
  • 事件与路由器绑定

    我在用着导航网 https github com krasimir navigo对于一个小网站 用户被要求登录到登陆页面上的帐户 然后在验证其帐户后路由到主模板 页面对象是从 Firebase 数据库填充的 因此我初始化一个类并将多个事件和
  • 是否可以在 Sublime Text 2 中链接键绑定命令?

    有时 我想在 Sublime Text 中显示侧栏中的当前文件 然后在文件夹结构中导航 这可以使用命令来实现reveal in side bar and focus side bar然而 它们必须绑定到两个单独的按键组合 因此我必须执行 2
  • 在 SQL Server 中将月份名称转换为月份编号

    在 T SQL 中 将月份名称转换为数字的最佳方法是什么 E g January gt 1 February gt 2 March gt 3 Etc 是否有任何内置函数可以做到这一点 这个怎么样 select DATEPART MM jan
  • 如何用新列覆盖 Spark 数据框中的整个现有列?

    我想用一个新列覆盖 Spark 列 该新列是二进制标志 我尝试直接覆盖 id2 列 但为什么它不像 Pandas 中的就地操作那样工作 如何在不使用 withcolumn 创建新列和 drop 删除旧列的情况下做到这一点 我知道 Spark
  • ASP.NET Core 5.0 RouteDataRequestCultureProvider 删除 url 中的默认区域性

    我尝试向我的 asp net core 项目添加多语言功能 但 RequestLocalization 中的 net 3 1 和 5 0 之间存在一些变化 我无法得到我想要的 我为每种语言添加了资源文件 并在我的剃刀页面中使用了资源 它可以
  • Windeployqt 不会为调试应用程序部署 qwindowsd.dll

    我正在尝试使用windeployqt exe Qt 5 13 2 为 CMake 3 16 生成的调试应用程序部署 dll 除了部署的平台插件 dll 之外 所有 dll 均已正确部署qwindows dll代替qwindowsd dll当
  • 系统verilog中的打包向量与未打包向量

    看看我在 System Verilog 中维护的一些代码 我看到一些信号的定义如下 node range hi range lo x 以及其他定义如下 node y range hi range lo 我明白那个x被定义为打包的 而y被定义
  • 对特定行禁用 StyleCop

    我们在 C 项目中使用 StyleCop 但在某些情况下 我们希望避免这些规则 我知道你可以添加
  • 阻止自动化工具访问网站

    我们网站上的数据很容易被窃取 我们如何检测是否有人正在查看网站或工具 一种方法是计算用户在页面上停留的时间 我不知道如何实施 任何人都可以帮助检测并防止自动化工具从我的网站上抓取数据吗 我在登录部分使用了安全图像 但即使如此 人们也可以登录
  • 包 org.springframework.data.repository 不存在 spring boot jpa

    我对 spring boot jpa 有一个小问题 我已将依赖项添加到 POM xml 我可以从 spring 工具套件正常运行它 作为 spring boot 应用程序运行 但是当我从命令行 mvn spring boot run 运行时
  • C++11 中没有“sto{short, unsigned Short}”函数吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 完全奇怪的 Firefox CSS bug

    我从事前端开发很长时间了 以前从未遇到过这样的错误 将以下 HTML 保存到文件并在 Firefox 中查看 我的是 3 6 3 h2 Some normal text strong some bold text strong weird
  • XSLT - 作为一系列节点的参数

    我的目标是将多个文件的名称传递到 XSLT 中并使用document myFile 我试图使用 saxon 引擎在命令行上传递参数 但它不断抛出错误 我知道我可以写出一个清单文件 对其进行处理 然后在完成后将其删除 但这似乎需要大量额外工作