version - 从
问题描述
我想访问我存储在
<xsl:stylesheet>
<xd:doc scope="stylesheet">
<xd:ul>
<xd:li>
<xd:i>Updates</xd:i>: <xd:ul>
<xd:li>20.11.2018, version: <xd:i>1.1.0</xd:i></xd:li>
<xd:li>08.03.2019, version: <xd:i>2.0.0</xd:i></xd:li>
<xd:li>11.03.2019, version: <xd:i>2.0.1</xd:i></xd:li>
</xd:ul>
</xd:li>
</xd:ul>
</xd:doc>
</xsl:stylesheet>
通常,XPath@select
被评估为当前正在转换的 xml 文件。但是如何将 XPath 引用到(主)XSL 样式表?
另一种选择是使用fn:doc()
. 但我想将版本编写功能放在外部模块中,所以会有动态文件名,我不知道如何获取 xsl 文件名
我使用 oXygen XML 编辑器 20.1 来定义转换场景。
解决方案
@MartinHonnen 谢谢。我更新了问题中的代码。如您所见,我将版本存储在样式表的文档中。
这document('') / doc('')
正是我所需要的。所以我实现了以下内容:
我将主样式表的文档节点放在该样式表中的变量中:
<xsl:variable name="currentStylesheet" select="doc('')"/>
然后在外部模块中引用它
<xsl:variable as="xs:string" name="versionXSLT" select="$currentStylesheet//xd:li[xd:i = 'Updates']/xd:ul/xd:li[last()]/xd:i/string()"/>
我还使用它来获取样式表的名称:
<xsl:variable as="xs:string" name="currentStylesheetName" select="tokenize(document-uri($currentStylesheet), '/')[last()]"/>
有没有更好的解决方案?
推荐阅读
- crc - 如何计算 24 位长十六进制的 CRC-32(例如 0xAAAAAA00)?
- arrays - bash脚本写入xml文件的特定部分
- command-line - 从目录中获取具有特定扩展名的文件名
- jboss - 仅在服务器组中部署 Wildfly 节点 2 | 部署在集群中的特定节点上
- mongodb - 删除大小大于特定值的文档
- azure - (Azure stack-AKS) 从门户关闭 VM 后无法连接到 Kubernetes 自我管理集群(托管在 Azure Stack 上)
- mysql - Maria DB - 使用前一行的值更新行+常量
- rsh - 如何通过 linux 运行 rsh 命令
- ruby - Gtk 窗口交互滞后于窗口焦点
- visual-studio - 在 Windows 上从 libgrpc_csharp_ext.x64.so 中去除调试信息