XSLT-根据匹配的节点值从其他XML文件复制节点

您好,我有两种不同的xml,我想合并它们,根据匹配的源和目标xml节点值从目标xml复制一个节点

像这样的第一个xml:

<PRODUCTS>
  <PRODUCT>
    <NAME>PRODUCT 1</NAME>
    <MAINCATID>38</MAINCATID>
    <SUBCATID>39</SUBCATID>
  </PRODUCT>
</PRODUCTS>

第二个XML就是这样

 <CATEGORIES>
  <MAINCATEGORY>
   <MAINCATID>38</MAINCATID>
   <MAINCATNAME>CATEGORY 1</MAINCATNAME>
  </MAINCATEGORY>
  <MAINCATEGORY>
   <MAINCATID>37</MAINCATID>
   <MAINCATNAME>CATEGORY 2</MAINCATNAME>
  </MAINCATEGORY>
  <SUBCATEGORY>
   <SUBCATID>39</SUBCATID>
   <SUBCATNAME>SUB CATEGORY 1</SUBCATNAME>
  </SUBCATEGORY>
  <SUBCATEGORY>
   <SUBCATID>40</SUBCATID>
   <SUBCATNAME>SUB CATEGORY 2</SUBCATNAME>
  </SUBCATEGORY>
</CATEGORIES>

我的结果xml应该像

<PRODUCTS>
  <PRODUCT>
    <NAME>PRODUCT 1</NAME>
    <MAINCATID>38</MAINCATID>
    <MAINCATNAME>CATEGORY 1</MAINCATNAME>
    <SUBCATID>39</SUBCATID>
    <SUBCATNAME>SUB CATEGORY 1</SUBCATNAME>
  </PRODUCT>
</PRODUCTS>

有很多这样的节点。我想从第二个xml基于主要和子食物ID获得类别名称。

您能为这个XSLT转换提供帮助吗?

michael.hor257k

在XSLT 1.0中,使用密钥从另一个文档中查找数据有点尴尬,但是就性能和代码清晰度而言,它仍然是最好的方法,恕我直言。尝试:

XSLT 1.0

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:variable name="lookup-source" select="document('file2.xml')" />

<xsl:key name="MAINCATID" match="MAINCATNAME" use="../MAINCATID" />
<xsl:key name="SUBCATID" match="SUBCATNAME" use="../SUBCATID" />

<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="MAINCATID | SUBCATID">
    <xsl:copy-of select="."/>
    <xsl:variable name="key-name" select="local-name()"/>
    <xsl:variable name="key-value" select="."/>
    <!-- switch context to the other file for the actual lookup -->
    <xsl:for-each select="$lookup-source">
        <xsl:copy-of select="key($key-name, $key-value)" />
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

我们在这里假设您的“第一个xml”文档正在处理中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

XSLT-根据其他节点修改XML节点的值

来自分类Dev

使用XSLT根据XML中的其他节点更改节点的值

来自分类Dev

XSLT / XML将节点的值复制到节点

来自分类Dev

根据节点值使用xslt从xml中删除节点

来自分类Dev

复制XML文件内容(根节点和属性XSLT除外)

来自分类Dev

复制除根节点和属性XSLT之外的XML文件内容

来自分类Dev

XSLT - 根据其他属性的值复制某些属性

来自分类Dev

XSLT与节点不匹配

来自分类Dev

根据XSLT中的ID组合多个xml节点值

来自分类Dev

使用 xslt 根据子值获取 xml 节点

来自分类Dev

复制节点并替换XSLT中的值

来自分类Dev

如何使用XSLT根据子节点的条件复制父节点?

来自分类Dev

XSLT节点值比较

来自分类Dev

使用 XSLT 将基于条件的 XML 节点属性动态传递给其他节点

来自分类Dev

如何使用XSLT根据另一个节点的内容获取XML节点的值?

来自分类Dev

使用XSLT转换XML节点值

来自分类Dev

XSLT on XML 从混合节点获取父值

来自分类Dev

使用XSLT XPATH根据内部节点值获取外部节点

来自分类Dev

XSLT复制文本节点

来自分类Dev

XSLT 仅复制某些节点

来自分类Dev

使用xslt删除节点xml

来自分类Dev

使用xslt的动态xml节点

来自分类Dev

通过xslt组合xml节点

来自分类Dev

XSLT 1.0:如何根据未完全定义的条件匹配节点?

来自分类Dev

使用XSLT乘以节点值

来自分类Dev

连接XSLT中的节点值

来自分类Dev

子节点问题的 XSLT 值

来自分类Dev

传递XML节点的内容以在XSLT中进行其他处理

来自分类Dev

如何使用XSLT根据输入XML请求的相同属性从XML文件中删除公共节点?