xslt - 根据来自另一个 xml 的 id 创建新节点,循环
问题描述
我想添加一个基于 的节点,但问题是类别在一个单独的文件中,而且我想循环查找所有基于 .
让我举个例子:
类别.xml:
<ROOT>
<GROUPITEM>
<G_ID>1368</G_ID>
<GROUP>Phone</GROUP>
<PARENT>0</PARENT>
</GROUPITEM>
<GROUPITEM>
<G_ID>1194</G_ID>
<GROUP>Apple</GROUP>
<PARENT>1368</PARENT>
</GROUPITEM>
<GROUPITEM>
<G_ID>1195</G_ID>
<GROUP>2019</GROUP>
<PARENT>1194</PARENT>
</GROUPITEM>
</ROOT>
项目.xml:
<ROOT>
<SHOPITEM>
<PRODUCT_ID>96555</PRODUCT_ID>
<GROUP_ID>1195</GROUP_ID>
<PRODUCT_NAME>Apple iPhone 8 Plus</PRODUCT_NAME>
</SHOPITEM>
</ROOT>
示例输出:
<ROOT>
<SHOPITEM>
<PRODUCT_ID>96555</PRODUCT_ID>
<GROUP_ID>1195</GROUP_ID>
<PRODUCT_NAME>Apple iPhone 8 Plus</PRODUCT_NAME>
<CATEGORY>Phone | Apple | 2019</CATEGORY>
</SHOPITEM>
</ROOT>
简而言之,我正在寻找一种方法来创建节点(在 item.xml 中)并基于(item.xml)在此处添加值(来自 category.xml):在 category.xml 中搜索相同的 -> 如果找到,添加它->搜索更多基于(如果成功添加分隔符+值)->循环。
解决方案
尝试类似(未经测试):
XSLT 2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:key name="group" match="GROUPITEM" use="G_ID" />
<xsl:template match="SHOPITEM">
<xsl:copy>
<xsl:copy-of select="*"/>
<CATEGORY>
<xsl:apply-templates select="key('group', GROUP_ID, document('category.xml'))"/>
</CATEGORY>
</xsl:copy>
</xsl:template>
<xsl:template match="GROUPITEM">
<xsl:variable name="parent" select="key('group', PARENT)" />
<xsl:if test="$parent">
<xsl:apply-templates select="$parent"/>
<xsl:text> | </xsl:text>
</xsl:if>
<xsl:value-of select="GROUP"/>
</xsl:template>
</xsl:stylesheet>
推荐阅读
- django - 编辑时未显示 Django ModelChoiceField 初始值
- r - 从系统发育树的集合中获得平均系统发育树分支长度
- android - Alram 经理 24 小时后不工作,一小时后停止服务
- python-3.x - 编译代码中的 Jupyter Notebook 语法错误
- javascript - 如何使用 javascript 将“编辑快捷方式”图标添加到 Wordpress 定制器
- java - 如何上下设置动作按钮?像股票安卓
- reactjs - 下拉选项在 React-Bootstrap-Table-2 中不起作用
- android - 有没有办法从 laravel 后端获取文件夹到 React Native 移动应用程序?
- python - 有没有办法用 MOUSEBUTTONDOWN 事件关闭 pygame 窗口?
- c# - 通过滑块控制聚光灯方向