bash 中的 XSLT 转换将 XPATH 值传递给输出文件名

Posted

技术标签:

【中文标题】bash 中的 XSLT 转换将 XPATH 值传递给输出文件名【英文标题】:XSLT Transformation within bash pass XPATH value to output file name 【发布时间】:2021-11-11 14:15:30 【问题描述】:

我正在做一个批量 xsl 转换,并希望使用我的样式表中的参数来形成输出文件名,但我不太确定如何做到这一点,它应该是这样的:

$output = Join-Path $mypath XPATH $file.Name
java -cp $saxonpath net.sf.saxon.Transform -t -s:$file -xsl:$xsltpath -o:$output

XPATH 指的是我的 XPATH,就像 count(//error) 一样简单)

希望有人可以帮助我解决这个问题。z 谢谢!

【问题讨论】:

【参考方案1】:

而不是使用-o:$output 定义输出 您可以将输出路径作为参数传递给您的转换,并使用xsl:result-document 创建输出文件。

类似的东西:

$output = Join-Path $mypath $file.Name
java -cp $saxonpath net.sf.saxon.Transform -t -s:$file -xsl:$xsltpath -mypath=$output

<xsl:stylesheet>
  ...
  <xsl:param name="mypath"/>
  ...
  <xsl:result-document href="concat($mypath,count(//error))" method="xml">
    ...
  </xsl:result-document>
</xsl:stylesheet>

根据您的系统,您需要注意路径中使用的分隔符。

【讨论】:

非常感谢,这对我来说也是一个选择,我想我会同时使用这两种选择。【参考方案2】:

如果您想在运行 XSLT 进行计算之前进行 XPath 评估,例如该计数然后调用 XQuery 处理器,例如

java -cp $saxonpath net.sf.saxon.Query -qs:'count(//error)' -s:$file '!method=text'

例如将其存储在变量中

count=`java -cp $saxonpath net.sf.saxon.Query -qs:'count(//*)' -s:$file '!method=text'`

或者,在您的原始版本中,可能

$output = Join-Path $mypath `java -cp $saxonpath net.sf.saxon.Query -qs:'count(//*)' -s:$file '!method=text'` $file.Name

【讨论】:

太好了,谢谢,这正是我想要的!

以上是关于bash 中的 XSLT 转换将 XPATH 值传递给输出文件名的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 将 XSLT 更改为使用动态 XPath?

如何将 xslt 中的参数用作 XPath?

XPath 计数转换的行

XSLT

优化 xslt xpath 匹配表达式

xslt 中的 xpath 产生与直接评估 xpath 不同的结果