xslt - 基于逻辑将不同元素复制到变量中 - XSLT
问题描述
好吧,我想这个问题会有点挑战性,但我会感谢任何帮助。我有一个看起来像这样的 xml:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<root xmlns:cd="http://blabla" xmlns:se="http://blahblah">
<se:Tuple>
<se:name>AAA</se:name>
<se:game>a</se:game>
</se:Tuple>
<se:Tuple>
<se:name>BBB</se:name>
<se:game>b</se:game>
</se:Tuple>
<se:Tuple>
<se:name>CCC</se:name>
<se:game>c</se:game>
</se:Tuple>
<cd:Tuple>
<cd:name>AAA</cd:name>
<cd:genre>aaa</cd:genre>
</cd:Tuple>
<cd:Tuple>
<cd:name>CCC</cd:name>
<cd:genre>ccc</cd:genre>
</cd:Tuple>
</root>
我想使用 xslt 3.0 转换(混合)这些数据并将其存储在一个变量中,以便在 xslt 文件中进一步使用:
<se:Tuple>
<se:name>AAA</se:name>
<se:game>a</se:game>
<cd:genre>aaa</cd:genre>
</se:Tuple>
<se:Tuple>
<se:name>BBB</se:name>
<se:game>b</se:game>
</se:Tuple>
<se:Tuple>
<se:name>CCC</se:name>
<se:game>c</se:game>
<cd:genre>ccc</cd:genre>
</se:Tuple>
混合背后的逻辑是:将所有 se:Tuple 复制到变量中。如果有任何 cd:Tuple 的 cd:name 等于 se:name,则在复制每个 se:Tuple 时,将 cd:genre 从该 Tuple 复制到 se:Tuple 中。
非常感谢:)
解决方案
这似乎是一个简单的分组或交叉引用问题,取决于是否有cd:Tuple
with cd:name
that is not in any se:Tuple
。如果没有,那么您可以简单地分组<xsl:for-each-group select="se:Tuple, cd:Tuple" group-by="se:name, cd:name">
,否则使用密钥<xsl:key name="cd-tuple-ref" match="cd:Tuple" use="cd:name"/>
然后处理任何se:Tuple
并复制key('cd-tuple-ref', se:name)/cd:genre
。
推荐阅读
- c - `double (* data)[5];` 是什么意思?
- stripe-payments - 如何将现有的 Stripe 账户连接到我的平台账户?
- reactjs - 使用带有 mockResolvedValue 的异步函数测试 React 组件 - 承诺未解决
- python - 芹菜 - 如何通过任务ID获取任务名称?
- python - 用于弹性搜索清理 Python 的 AWS lambda 问题
- vb.net - 如何使用 CKEditor 5 图片上传?
- c++ - 多态类型的 C++ unique_ptr 数组
- python - Django,如何更新图像
- flutter - 我的 .map 方法在功能中无法正常工作
- ios - 有没有办法使用 XCUITest 测试快速操作?