xml - XSLT 模板匹配用于选择的数据范围
问题描述
我有一个问题。我有一些 XML。我想对层次结构中的一些重复部分使用模板匹配。我的部分匹配条件是来自模板匹配之外的数据。如何做到这一点?
我正在使用 XSLT v3.0。
示例数据(比实际数据简单得多,但应该可以解释我的情况):
<root>
<source>Abc</source>
<record>
<key>1</key>
<value>a</value>
</record>
<record>
<key>1</key>
<value>a</value>
</record>
<record>
<key>2</key>
<value>b</value>
</record>
<record>
<key>3</key>
<value>c</value>
</record>
</root>
我的模板匹配条件如下所示:
<template match="record[key ="a"] and \root\source = "Abc">
显然,关于记录的部分有效,关于 \root\source 的部分无效。即使我想在模板中使用 \root\source 值,它也是空白的。我知道这可能是 XSLT 的一些范围限制。有什么办法可以绕过它吗?
谢谢!
解决方案
我猜(!)你想要:
<xsl:template match="root[source = 'Abc']/record[key ='a']" >
这将匹配一个record
值为key
的"a"
并且有一个source
值为 的兄弟"Abc"
。
即使我想在模板中使用 \root\source 值,它也是空白的。
在模板匹配record
中,您可以获得source
使用以下任一表达式的值:
<xsl:value-of select="../source" />
<xsl:value-of select="preceding-sibling::source" />
<xsl:value-of select="/root/source" />
推荐阅读
- go - 关于将 yaml 解组为结构的错误
- wordpress - 如何在旋转滑块中启用视频声音。?
- python - 在 Python 中使用 readlines 输出
- python - Python 使用的字符串比较 if 语句
- javascript - 在每个页面上调用一个节点函数
- javascript - 在对象数组中合并具有“相同键”的对象
- css - 自定义引导视频轮播错误下一个和上一个控件阻止轮播中视频的视频控件
- python - 关于使用 string.replace 和 regex 清理数据的问题
- docker - 如何在 nginx 容器中将环境变量与 lua 一起使用
- vue.js - 如何切换表中具有相同值的多行?