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 值传递给输出文件名的主要内容,如果未能解决你的问题,请参考以下文章